This course provides an in-depth journey through modern Java object-oriented and function programming concepts and features, and explores how to apply these concepts and features to implement efficient and scalable concurrent programs using very modern Java features like virtual threads. The first week gives an overview of Java object-oriented and functional programming paradigms. The second and third week delve into Java functional programming features, such as lambda expressions, method references, and functional interfaces. The final week explores the intricacies of very modern Java platform threads, virtual threads, as well as Java's asynchronous computation features, such as Future & FutureTask. After completing this course, you'll gain a deep understanding of both object-oriented and functional programming concepts and features in Java, along with the ability to apply these concepts and features to develop multi-threaded programs. To illustrate key points, we walk through numerous case studies, all of which are available in open-source form from my GitHub repository.