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