Turbo Charge CPU Utilization in Fork/Join Using the ManagedBlocker

Heinz KabutzThe Multithreading Guy

Fork/Join is a framework for parallelizing calculations using recursive decomposition, also called divide and conquer. These algorithms occasionally end up duplicating work, especially at the beginning of the run. We can reduce wasted CPU cycles by implementing a reserved caching scheme. Before a task starts its calculation, it tries to reserve an entry in the shared map. If it is successful, it immediately begins. If not, it blocks until the other thread has finished its calculation. Unfortunately this might result in a significant number of blocked threads, decreasing CPU utilization. In this talk we will demonstrate this issue and offer a solution in the form of the ManagedBlocker. Combined with the Fork/Join, it can keep parallelism at the desired level.


Dr Heinz Kabutz is a Java guru who lives on the Island of Crete in Greece, where he has lots of Bulgarian friends. He is the author of The Java Specialists' Newsletter, a publication looking at advanced tips and tricks for the seasoned Java programmer. He also teaches advanced courses on Java concurrency, performance and design patterns.