如果等待只能從同步上下文中調用,並且只能在保持其鎖定的情況下調用對象的等待,那麼多個線程如何在同一個對象上等待呢?此外,由於通知也必須從同步上下文中調用,通知如何發生?多個線程可以一次等待一個對象嗎?
回答
等待方法版本它正在等待的對象上的鎖定。一旦釋放,另一個對象就可以獲得該鎖並等待或通知。而且,這全是right there in the javadoc。
不是直接回答您的問題,而是使用等待方法代替CountDownLatch類,可以在Java 5上使用併發包引入。您可以初始化您要等待的類的CountDownLatch
,並且等待它的方法應該執行await()方法,並釋放調用方法countDown()的latch。在我看來,它比使用wait()更清晰明瞭。有效的Java書有關於這個類的一個非常有趣的話題。
確保您測試這些新的併發類「CountDownLatch」和「CyclicBarrier」的性能(配置文件執行)。它們非常容易使用,但需要付出代價。我能夠將我的表現提高三倍,但是我花了大約8個小時才完成重型單元測試。 – 2013-02-19 08:22:52
這實際上是我正在尋找的答案,它回答了問題的主題。我認爲問題的細節是走錯路的證據。 – Danger 2016-11-26 21:57:32
- 1. 幾個線程可能在同一個對象上等待嗎?
- 2. c#多個線程等待一個ManualResetEvent
- 3. 等待另一個線程
- 4. 多個線程等待NetworkStream.Read
- 5. 我可以多次運行一個線程嗎?
- 6. 如何讓一個線程等待另一個線程?
- 7. 可以等待來自多個線程的相同任務嗎 - 是否等待線程安全?
- 8. 在同一個鎖上多次等待
- 9. 等待多個線程(POSIX線程,C++)
- 10. 一個線程可以中斷另一個線程嗎?
- 11. 我可以殺死一個等待TCP連接進入的線程嗎?
- 12. 異步等待一個線程完成
- 13. 異步/等待另一個線程ID
- 14. 如何等待一個線程完成
- 15. 爪哇等待在另一個線程
- 16. IllegalMonitorStateException當試圖等待()一個線程
- 17. Java:線程如何等待多個對象?
- 18. 多個線程等待同一個信號
- 19. 多個線程可以使用同一CacheManager的相同Ehcache對象嗎?
- 20. 可以從同一個線程移動分配std ::線程對象嗎
- 21. 如何讓1個UI線程等待另一個UI線程
- 22. BPMN - 等待一個事件一次
- 23. 我可以註冊一個對象嗎?
- 24. 一個類可以有多個線程函數嗎?
- 25. 如何讓一個線程等待另一個線程的一部分完成?
- 26. 一次可以加入多對多,一對多嗎?
- 27. 你可以在一個Using塊中處理多個對象嗎?
- 28. C++:一次可以添加多個對象的多態容器
- 29. 線程多次加入()一個線程
- 30. System.Threading.Timer在等待時消耗一個線程嗎?
以及我當然確實感到不好意思...謝謝! – Alex 2011-04-18 01:58:32
即使我也感到羞怯! – Touchstone 2015-05-11 17:33:24