为了账号安全,请及时绑定邮箱和手机立即绑定

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

如果加入了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 回答

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

0 回复 有任何疑惑可以回复我~
#1

Tenyears_3965313

不是return了吗?该线程不是已经执行结束了吗
2021-07-17 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信