5. How Java concurrency grew into thread pools
Trace the path from raw Thread objects to java.util.concurrent, ExecutorService, ForkJoinPool, CompletableFuture, and virtual threads. This explains why Java has several concurrency APIs and which problems each generation tried to solve.