Executor framework จัดการ pool ของเธรด ทำให้คุณส่ง task เข้าไปแทนที่จะต้องสร้างเธรดเอง และ CompletableFuture ประกอบการดำเนินการแบบ asynchronous เข้าด้วยกันในเชิงประกาศ (declarative) เมื่อใช้ร่วมกัน ทั้งสองเป็นวิธีสมัยใหม่ในการทำงานแบบ concurrent/async ใน Java โดยหลีกเลี่ยงต้นทุนและความซับซ้อนของการจัดการเธรดดิบ
ปัญหาของเธรดดิบ
(Task t : tasks) {
(() -> process(t)).start();
}
