package org.warp.commonutils.locks; import java.util.concurrent.Phaser; public class FlexibleCountDownLatch { private final Phaser phaser; public FlexibleCountDownLatch(int initialSize) { this.phaser = new Phaser(initialSize + 1); } public void await() { phaser.arriveAndAwaitAdvance(); } public void grow() { phaser.register(); } public void grow(int n) { phaser.bulkRegister(n); } public void countDown() { phaser.arriveAndDeregister(); } }