Executors and CompletableFuture
Executors separate task submission from thread management. CompletableFuture composes asynchronous stages.
ExecutorService pool = Executors.newFixedThreadPool(4);
CompletableFuture<String> future =
CompletableFuture.supplyAsync(() -> loadUser(), pool)
.thenApply(User::name);
future.thenAccept(System.out::println);
Choose executor sizes based on workload. CPU-bound and blocking I/O workloads usually need different strategies. Always define shutdown behavior for owned executors.
Key Takeaways
- Executors control concurrency resources.
CompletableFutureenables composition of asynchronous operations.- Thread-pool sizing depends on workload characteristics.