在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