我希望快速的問題。如果我使用Java中的對象調用notify,是否保證不喚醒在調用notify之後等待(嚴格)的任何線程。換句話說,通知只喚醒已經在等待的線程。據推測,notifyAll
將表現相同的方式。等待和通知的順序
例如,如果保證不成立的話,那就在這個順序是可能的:
- 線程n取得鎖,來電通知,並釋放鎖。
- 線程W獲得鎖,調用等待並釋放鎖。
- 主題W由線程喚醒獅集團的通知,並繼續...
感謝您的幫助!
我希望快速的問題。如果我使用Java中的對象調用notify,是否保證不喚醒在調用notify之後等待(嚴格)的任何線程。換句話說,通知只喚醒已經在等待的線程。據推測,notifyAll
將表現相同的方式。等待和通知的順序
例如,如果保證不成立的話,那就在這個順序是可能的:
感謝您的幫助!
當你調用通知正在等待的線程之一(如果有的話)將被喚醒。當前沒有等待這個對象的線程不能被等待,並且線程沒有等待(但是稍後會等待)也不能被喚醒(顯然)。
如果您調用notifyAll,則會喚醒當前正在等待的所有線程。
我建議你閱讀命中here
那麼,對於notify()
方法的javadoc明確規定,即:
喚醒在一個線程是等待在該對象的監視器上。
爲notifyAll()
同樣的事情:
喚醒在是等待在該對象的監視器上的全部線程。
爲了被放置在等待線程隊列,線程必須首先獲得該對象的鎖,然後釋放它,然後才其他線程將能夠獲得鎖定並調用notify()
。
所以我想你不必擔心它。