In this chapter, we explained one of the most powerful synchronization mechanisms provided by the Java concurrency API: the phaser. Its main objective is to provide synchronization between tasks that execute algorithms divided into phases. None of the tasks can begin the execution of a phase before the rest of the tasks have finished the previous one.
The phaser has to know how many tasks have to be synchronized. You have to register your tasks in the phaser using the constructor, the bulkRegister()
method, or the register()
method.
Tasks can synchronize with the phaser in different ways. The most common task is indicating to the phaser that it has finished the execution of one phase and wants to continue with the next one with the arriveAndAwaitAdvance()
. This method will sleep the thread until the rest of the tasks have finished the actual phase. But there are other methods you can use to synchronize your tasks. The arrive()
method is used to notify the phaser that you have finished...