为什么用 synchronized (lockobject) { if (energyboxs[from] < amount) return;加重系统开销呢?

来源:4-3 Java线程交互之互斥与同步:守恒的能量

福工刘德华

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;


写回答 关注

2回答

  • 姓白名黑
    2018-01-26 20:44:53

    其他线程处于就绪队列,等待抢占资源,而wait是进入等待队列不能抢占资源,如果没有wait,那么条件不足的线程不进入等待队列而是进入就绪队列,这样的话该线程就有可能再一次进行同步锁进入退出的操作,这就是所谓的加大开销。

    Tenyea...

    不是return了吗?该线程不是已经执行结束了吗

    2021-07-17 16:20:21

    共 1 条回复 >

  • 一分钟出戏_0
    2017-11-16 18:49:36

    当线程条件不满足时使用localObj.wait对线程进行阻挡,其仍滞留在wait set中等待唤醒

深入浅出Java多线程

带你一起深入浅出多线程,掌握基础,展望进阶路线

186088 学习 · 464 问题

查看课程

相似问题