在Java曾经的CountDownLatch达到= 0的状态,它不能改变它,所以它永远是开放的。我想知道为什么实现者不允许重用CountDownLatch?为什么java中的CountDownLatch不能再改变它的状态?
回答
因为它是CountDownLatch特定的功能。如果CountDownLatch将重置其计数器那么它会表现得有点像为的CyclicBarrier
叶夫Dorofeev我不同意,的CyclicBarrier等待所有线程扎堆在1点的代码,而使用事件(倒数)锁存作品和所有参与者在不同的代码部分等待。 – 2014-12-04 15:15:07
如果它是可重用的,你将如何处理到来的不同迭代?例如,假设你想在CountDownLatch
上等待。
CountDownLatch latch = new CountDownLatch(1);
latch.await();
然后一个线程调用
latch.countDown();
的await
被释放。现在你有另一个线程,只有当前线程倒计时才会释放。所以你调用latch.await()
。如果锁存器是可变的,线程应该等待还是继续?闩锁如何知道这个等待不应该在另一个周期(或阶段)?
最后,它不会是理所当然的。一个可变的锁定是困难的,但它是可能的。 Java 7推出了Phaser。它把每下一次迭代的阶段,您可以告诉移相器,等待在一个特定的阶段:
phaser.awaitAdvance(phase);
谢谢约翰,很清楚。 :) – 2014-12-04 15:20:24
- 1. 为什么我的WPF绑定不能在状态改变中工作?
- 2. 状态栏不改变它的方向
- 3. 为什么我的状态不会改变使用immutableJS?
- 4. 为什么复选框的状态不会改变?
- 5. Java中的最后一个变量不能再修改到什么时候?
- 6. 为什么历史状态不能在JS中本地更改?
- 7. 为什么状态栏颜色不变?
- 8. 值数组的,为什么它不改变它的值不会改变
- 9. 为什么调用setState方法不会立即改变状态?
- 10. (React.js)为什么状态不会立即改变?
- 11. 即使条件不满足,为什么状态会改变?
- 12. ReactJS:为什么我不应该改变嵌套状态?
- 13. 为什么mylistview在更改状态后不能重新加载?
- 14. 的Javascript的问题,不知道什么时候改变状态
- 15. 为什么我的元描述标签的动态更改不会改变它?
- 16. 为什么静态属性B = $ {A}在更改A时不再改变?
- 17. firefox:为什么我的状态栏没有改变?
- 18. 为什么我的状态栏未改变首选风格?
- 19. 为什么我的变量不改变它的值?
- 20. 为什么matplotlib.pyploy.imshow会改变它的轴?
- 21. Java-为什么Post Increment不改变值?
- 22. 什么会导致SetKey不改变我的表状态?
- 23. 为什么我不能更改变量?
- 24. 为什么不能改变元素类?
- 25. TextView(带ID)为什么不自动保存它的状态?
- 26. 为什么我的状态不确定?
- 27. 什么可能导致XMLHttpRequest在Firefox中永远不会改变状态?
- 28. componentDidMount中的setState不会改变状态
- 29. int为什么没有改变? java的
- 30. 为什么堆被改变的java
如果允许重新使用,你会重新使用它,而它仍在计数停止吗? – 2014-12-04 15:01:59
@Stav Saad如果它不是0,那么不要允许,否则允许。我实现了可重用的Latch。顺便说一句,标准CyclicBarrier是可重用的。我没有看到的原因 – 2014-12-04 15:08:44