2, async của nodejs thì ko phải thế. node chỉ có 01 thread thôi. nó dùng 1 cái event loop ( vòng lặp) để chạy mỗi thứ 1 tý

,
2 trường hợp:
1, nếu trong A bạn gọi
await lệnh B thì nó nó ko chạy tiếp C, D đâu, nó chạy cái A khác, theo lời await. khi nào B return thì mới chạy tiếp C, D.
2, nếu bạn dùng B.promise (function log) thì sẽ chạy tiếp C, D -> a kết thúc và có 1 cái promise chờ chạy khi B xong. thì khi B trả về response thì đoạn function log mới chạy. và ta có async
vậy nếu B ko gọi IO, mà chỉ tốn CPU & RAM thì ở cả 2 case, nó treo luôn thằng A lẫn nodejs process. bạn có thể tự test rất dễ
còn khi dùng java thì giống như bạn, B chạy trong thread khác, thread do hệ điều hành xử lý nên
ko thể khó bị treo