The Executor framework manages pools of threads so you submit tasks instead of manually creating threads, and CompletableFuture composes asynchronous operations declaratively. Together they're the modern way to do concurrent/async work in Java — avoiding the cost and complexity of raw thread management.
Matsala ta raw threads
(Task t : tasks) {
(() -> process(t)).start();
}
