課程
/后端開發(fā)
/Java
/深入淺出Java多線程
為什么 要用while循環(huán) 在講互斥時(shí)候 while(energyBoxs[from]<amount){lockObj.wait()}
2017-11-22
源自:深入淺出Java多線程 4-4
正在回答
synchronize(lockObj)?{?<-------?這個(gè)獲取鎖操作會(huì)增加系統(tǒng)開銷 ????if(energyBoxs[from]<amount){ ????????return; ????} ????... }
之前的寫法:每次成功獲取鎖之后,先條件判斷,若為false,則返回,釋放鎖。 然后又要再次獲取鎖,這樣操作會(huì)以很大的系統(tǒng)開銷作為代價(jià)的。改成下面寫法的話:
synchronize(lockObj)?{? ????while(energyBoxs[from]<amount){ ????????lockObj.wait(); ????}?????????? }
就是為了減小系統(tǒng)開銷
笙__笙 提問者
慕田峪3134475 回復(fù) 笙__笙 提問者
笙__笙 提問者 回復(fù) 慕田峪3134475
亞歷山魈 回復(fù) 笙__笙 提問者
舉報(bào)
帶你一起深入淺出多線程,掌握基礎(chǔ),展望進(jìn)階路線
2 回答lockobj 注釋含義
4 回答EnergySystem 里面的lockObj 換成energyBoxes
2 回答把lockObj改成Thread類 程序也能正常運(yùn)行
6 回答鎖lockObj如果寫成靜態(tài)的會(huì)不會(huì)有什么影響?
8 回答lockObj.notifyAll(); 說是喚醒所有在lockObj對象上等待的線程,energyBoxes[from] < amount那么肯定會(huì)出現(xiàn)有些線程這個(gè)條件不滿足的啊,咋能喚醒全部線程呢?
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網(wǎng)安備11010802030151號
購課補(bǔ)貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動(dòng)學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號
2017-11-24