2016-01-18 21 views
-1

我開始處理Thread的notify()和wait(),我知道可以通過將所有服務器添加到隊列中來輕鬆完成,但我仍然想知道是否有任何方法可以做到這一點沒有隊列,有多個服務員,每次一個一個地通知(沒有任何順序)。通知多個服務員一個接一個

+1

「有多個服務員,每次一個一個地通知」......這正是「wait()」和「notify()」的作用。如果3個線程在同一個對象上調用'wait()',並且之後對該對象調用了notify(),則其中一個線程(隨機選擇)被喚醒! – ParkerHalo

+0

@ParkerHalo,你應該說,「未指定」而不是「隨機」。 'o.notify()'的Javadoc說:「這個選擇是任意的,並且由實現決定。」 「隨機」意味着Javadoc不需要的特定行爲。 –

回答

1

的替代方案是:

  • 通知使用obj.notifyAll()在同一時間等待的對象上的所有線程。

  • 使用obj.notify()通知其中一個等待線程。

沒有辦法通知特定的線程。

我想你可以使用Queue的長度作爲暗示調用obj.notify()的次數,但我的建議是「不要」。這種方法存在各種潛在危害。


你沒有告訴我們你想什麼併發問題在這裏解決,但我建議你找一個替代辦法;例如使用標準併發包提供的其他(更高級別)同步機制之一。