2011-04-18 64 views
3

如果等待只能從同步上下文中調用,並且只能在保持其鎖定的情況下調用對象的等待,那麼多個線程如何在同一個對象上等待呢?此外,由於通知也必須從同步上下文中調用,通知如何發生?多個線程可以一次等待一個對象嗎?

回答

8

等待方法版本它正在等待的對象上的鎖定。一旦釋放,另一個對象就可以獲得該鎖並等待或通知。而且,這全是right there in the javadoc

+1

以及我當然確實感到不好意思...謝謝! – Alex 2011-04-18 01:58:32

+0

即使我也感到羞怯! – Touchstone 2015-05-11 17:33:24

1

不是直接回答您的問題,而是使用等待方法代替CountDownLatch類,可以在Java 5上使用併發包引入。您可以初始化您要等待的類的CountDownLatch,並且等待它的方法應該執行await()方法,並釋放調用方法countDown()的latch。在我看來,它比使用wait()更清晰明瞭。有效的Java書有關於這個類的一個非常有趣的話題。

+0

確保您測試這些新的併發類「CountDownLatch」和「CyclicBarrier」的性能(配置文件執行)。它們非常容易使用,但需要付出代價。我能夠將我的表現提高三倍,但是我花了大約8個小時才完成重型單元測試。 – 2013-02-19 08:22:52

+0

這實際上是我正在尋找的答案,它回答了問題的主題。我認爲問題的細節是走錯路的證據。 – Danger 2016-11-26 21:57:32

相關問題