Phân tích cách khởi chạy và kết hợp các tính toán bất đồng bộ với
CompletableFuture: cách khởi động tác vụ qua
supplyAsync và
runAsync, sự khác nhau giữa các trình xử lý
thenApply,
thenAccept,
thenRun, và khi nào nên chọn các phiên bản bất đồng bộ
thenApplyAsync/
thenAcceptAsync/
thenRunAsync. Sẽ bàn về luồng thực thi (
ForkJoinPool hoặc
Executor của bạn), kiểu kết quả (
CompletableFuture<T>,
CompletableFuture<Void>) và các lỗi thường gặp: gọi chặn
get()/
join(), lỗi không được xử lý nếu thiếu
exceptionally/
handle/
whenComplete, cũng như việc cố gắng dùng kết quả bên trong
thenRun.