课程
/后端开发
/Java
/深入浅出Java多线程
为什么 要用while循环 在讲互斥时候 while(energyBoxs[from]<amount){lockObj.wait()}
2017-11-22
源自:深入浅出Java多线程 4-4
正在回答
synchronize(lockObj) { <------- 这个获取锁操作会增加系统开销 if(energyBoxs[from]<amount){ return; } ... }
之前的写法:每次成功获取锁之后,先条件判断,若为false,则返回,释放锁。 然后又要再次获取锁,这样操作会以很大的系统开销作为代价的。改成下面写法的话:
synchronize(lockObj) { while(energyBoxs[from]<amount){ lockObj.wait(); } }
就是为了减小系统开销
笙__笙 提问者
慕田峪3134475 回复 笙__笙 提问者
笙__笙 提问者 回复 慕田峪3134475
亚历山魈 回复 笙__笙 提问者
举报
带你一起深入浅出多线程,掌握基础,展望进阶路线
2 回答lockobj 注释含义
4 回答EnergySystem 里面的lockObj 换成energyBoxes
2 回答把lockObj改成Thread类 程序也能正常运行
6 回答锁lockObj如果写成静态的会不会有什么影响?
8 回答lockObj.notifyAll(); 说是唤醒所有在lockObj对象上等待的线程,energyBoxes[from] < amount那么肯定会出现有些线程这个条件不满足的啊,咋能唤醒全部线程呢?