问答详情
源自:4-4 Java线程交互之深入剖析互斥与同步

lockObj

为什么 要用while循环 在讲互斥时候 while(energyBoxs[from]<amount){lockObj.wait()}

提问者:笙__笙 2017-11-22 14:57

个回答

  • 慕田峪3134475
    2017-11-24 15:36:05

    synchronize(lockObj) { <------- 这个获取锁操作会增加系统开销
        if(energyBoxs[from]<amount){
            return;
        }
        ...
    }
    之前的写法:每次成功获取锁之后,先条件判断,若为false,则返回,释放锁。
    然后又要再次获取锁,这样操作会以很大的系统开销作为代价的。改成下面写法的话:
    synchronize(lockObj) { 
        while(energyBoxs[from]<amount){
            lockObj.wait();
        }          
    }
    就是为了减小系统开销