2013-07-17 95 views
1

當有多個線程處於等待狀態時,如果我調用notify()而不是調用notifyAll()哪一個將在處於等待狀態的幾個線程中被通知?Java線程同步通知

+0

我不知道這個答案,但一個好主意是檢查出java.concurrent包,它可以爲你做很多事情。 – Fernando

+0

@Fernando他/她不是在問怎麼做,而是如何運作。 – m0skit0

回答

3

這是未定義的行爲。任何人都可以拿起。從JavaDoc

如果任何線程此對象上等待,它們中的一個被選擇爲 喚醒。 選擇是任意的,並且由 實施決定。

是的,這可能導致thread starvation

1

The javadoc說:

選擇是任意的,並在執行的自由裁量權發生。

1

當有多個線程處於等待狀態時;如果我調用notify()而不是調用notifyAll()哪一個將在處於等待狀態的幾個線程中被通知?

雖然如前所述,特定的行爲並未由Java規範定義,但我懷疑JDC實現會將線程放在特定監視器的WAIT隊列的前端。但是,這不應該依賴。