Framework-ul Executor gestionează pool-uri de thread-uri, deci tu trimiti sarcini în loc să creezi manual thread-uri, iar CompletableFuture compune operații asincrone în mod declarativ. Împreună sunt modul modern de a face lucru concurent/asincron în Java — evitând costul și complexitatea gestionării brute a thread-urilor.
Problema cu thread-urile brute
(Task t : tasks) {
(() -> process(t)).start();
}
