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