Mastering Java Multithreading (Part 2): Thread Pools, ExecutorService & CompletableFuture

In my previous post, “Mastering Java Multithreading: Thread vs Runnable vs Callable”, we explored how to create threads manually.