Iva*_*lin 3 java multithreading synchronization countdownlatch
在Java中,一旦CountdownLatch达到其状态= 0,它就无法改变它,因此它将永远保持打开状态.我想知道为什么实现者不允许重用CountDownLatch?
如果它是可重复使用的,您将如何处理不同的到达迭代?例如,假设你想要等待CountDownLatch.
CountDownLatch latch = new CountDownLatch(1);
latch.await();
Run Code Online (Sandbox Code Playgroud)
然后一个线程调用
latch.countDown();
将await被释放.现在你有另一个线程,只有在先前的线程倒计时才会释放.所以你调用latch.await().如果锁存器是可变的,那么线程应该等待还是继续通过?闩锁如何知道这等待不应该是另一个周期(或阶段)?
最后,它并不是理所当然的.可变锁存器很难,但它是可能的.Java 7推出了Phaser.它将每个下一次迭代视为一个阶段,您可以告诉移相器等待特定阶段:
phaser.awaitAdvance(phase);