Join us on an adventure as we tackle the toughest areas of Java to master - concurrency and performance.
We begin with the basics, explaining how we can protect memory from concurrent changes, and how to make changes visible to other threads. We then examine ways that we can make classes thread-safe through different confinement strategies.
Next we learn how the JDK offers a rich set of concurrent building blocks, and also why these are sometimes not enough.
We learn how we can break up our work into different tasks, and how to run these on various executor services, such as the ForkJoinPool and the ThreadPoolExecutor. We also learn how to configure these for specialized use cases.
We then examine how to find and resolve deadlocks and how to test our concurrent code. In the exercise, you will get a chance to discover for yourself a real life race condition in the JDK 25!
We then focus our attention a bit more on performance, learning how this relates to concurrency, throughput, latency, and scalability. Next we learn how to apply this for non-blocking algorithms, and with a look at the LMAX Disruptor and how it works to be so much faster than the LinkedBlockingQueue.
Lastly, we look at Java memory and how to optimize our code.
Every chapter has fun educational exercises for you to do, with a detailed walkthrough where you can watch me trying to solve the puzzles.
Plus you can ask questions in the comments sections of all the recordings.
Your Instructor
Heinz Kabutz is the author of The Java Specialists’ Newsletter, a publication enjoyed by tens of thousands of Java experts in over 150 countries. He has been a Java Champion since 2005.
Course Curriculum
-
Start1. Introduction (13:20)
-
Start1.1. History of Concurrency (5:45)
-
Start1.2. Benefits of Threads (10:31)
-
Start1.3. Risks of Threads (11:50)
-
Start1.4. Threads Are Everywhere (2:31)
-
Start1.5. Creating and Starting Threads (4:40)
-
Start1.A. Bonus PrintFlagsFinal (22:19)
-
Start1.X. Exercise Description (1:55)
-
Start1.Z. Exercise Walkthrough (2:17)