A phaser is a flexible Java synchronizer that combines the functionalities of CyclicBarrier and CountDownLatch in the following context:
- A phaser is made of one or multiple phases that act as barriers for a dynamic number of parties (threads).
- During a phaser lifespan, the number of synchronized parties (threads) can be modified dynamically. We can register/deregister parties.
- The currently-registered parties must wait in the current phase (barrier) before going to the next step of execution (next phase)—as in the case of CyclicBarrier.
- Each phase of a phaser can be identified via an associated number/index starting from 0. The first phase is 0, the next phase is 1, the next phase is 2, and so on until Integer.MAX_VALUE.
- A phaser ...