Executor framework quản lý các pool thread để bạn submit task thay vì tạo thread thủ công, và CompletableFuture kết hợp các thao tác bất đồng bộ theo kiểu declarative. Cùng nhau, chúng là cách hiện đại để làm việc concurrent/async trong Java — tránh chi phí và sự phức tạp của việc quản lý thread thô.
Vấn đề với thread thô
(Task t : tasks) {
(() -> process(t)).start();
}
