We don't have to exert much mental effort when writing blocking code, but this has drawbacks. Non-blocking code, on the other hand, could be used to increase application throughput. This is why non-blocking code is recommended in many scenarios. Over the last two decades, many approaches have been introduced to writing code that does not block.
In this session, we will look into those options that are available to us. To begin, I'll go over the evolution of the Java concurrency model since its inception with the vanilla thread. Then I will introduce Future/Callable, CompletableFuture, and briefly go over reactive programming, and finally conclude with the Project Loom that was added in Java 19.