用notifyAll()的話,不是會造成數據出錯么?
假設A、B線程的from都一樣,energyBoxes[from]<amount導致A、B線程都wait()了。當滿足energyBoxes[from] >=?amount后某線程調用了notifyAll(),A、B線程都會繼續運行,都對energyBoxes[from]進行操作,這樣不是會導致數據出錯么?
假設A、B線程的from都一樣,energyBoxes[from]<amount導致A、B線程都wait()了。當滿足energyBoxes[from] >=?amount后某線程調用了notifyAll(),A、B線程都會繼續運行,都對energyBoxes[from]進行操作,這樣不是會導致數據出錯么?
2014-12-06
舉報
2014-12-06
喚醒后還是要競爭鎖的,所以訪問時還是互斥的。
2014-12-06
是我理解錯了,notifyAll()后還是會逐個運行,不會一起向下運行造成數據出錯。
個人估計notifyAll()在遍歷wait set中的線程進行逐個喚醒時,應該還會用synchronized(this)互斥,不知是不是?