福工刘德华
2017-11-15 22:59
如果加入了synchronized块,每个线程都会有所谓"加锁",形成互斥,然后完整执行完线程,而这段代码使得那些所谓能量源不足的energyboxs[from]退出当前方法,然后不就和其他线程一样,获得分时再次获得cpu去执行线程内容,也就是和其他线程一样获得锁执行run方法,如何说这个(energyboxs[from] < amoun的线程会家中系统开销呢?我认为退出后再次执行不就和其他要执行的线程一样无异,为何偏偏说(energyboxs[from] < amount的线程会加重开销呢?
相关代码:private final Object lockobject = new Object();
synchronized (lockobject) {
if (energyboxs[from] < amount)
return;
其他线程处于就绪队列,等待抢占资源,而wait是进入等待队列不能抢占资源,如果没有wait,那么条件不足的线程不进入等待队列而是进入就绪队列,这样的话该线程就有可能再一次进行同步锁进入退出的操作,这就是所谓的加大开销。
当线程条件不满足时使用localObj.wait对线程进行阻挡,其仍滞留在wait set中等待唤醒
深入浅出Java多线程
186088 学习 · 464 问题
相似问题