2014-05-19 54 views
-2

在有多個實例在等待的線程中調用notify()時,Java(或JVM)如何選擇喚醒哪個線程?Java的通知如何工作?

+3

它不;結果是不確定的。這就是爲什麼你不應該使用它,而是'.notifyAll()'。除非你確定你只有一個'.wait()'呃。 – fge

+1

注意:如果沒有線程正在等待對象,則通知將被丟棄。 –

回答

2

來源,你可以使用一個答案:

  • Java Language Specification章17.2.2通知:
    沒有選擇哪個線程在等待集合的保證。

  • JavadocObject.notify()寫着:
    喚醒在此對象監視器上等待的單個線程。如果任何線程正在等待這個對象,則選擇其中一個線程來喚醒。 這個選擇是任意的,並且由實現決定。

+0

如果您認爲之前的研究不足,請將問題向下投票。我喜歡你指向可能找到的資源的方法。 +1 –

2

通知方法只喚醒等待對象的一個​​線程,該線程開始執行。所以如果有多個線程在等待一個對象,這個方法只會喚醒其中的一個。要喚醒的線程的選擇取決於線程管理的OS實現。