gpt4 book ai didi

java - 在锁定对象上同步与在处理的对象上同步

转载 作者:太空宇宙 更新时间:2023-11-04 06:43:59 25 4
gpt4 key购买 nike

代码中this问,

如果我同步某个锁对象上的 block 代码正在执行,而不是对象 c 本身据我所知,结果准确,速度几乎快了一倍。代码中的其他所有内容都是相同的:

public void update(SomeClass c) {

Object lock = new Object();
while (<condition-1>) // the conditions here and the calculation of
// k below dont have anything to do
// with the members of c
if (<condition-2>) {
// calculate k here
synchronized (lock) {
c.setInt(c.getInt()+k);
// System.out.println("in "+this.toString());
}
}
}

为什么会这样?

TIA

//===============================

编辑:

使用上面的锁,线程一个接一个地运行——一个线程运行整个序列,然后另一个线程接管并运行,直到所有 seq. 完成等等。这就是我得到准确结果的方式。为什么这个锁会发生这种情况?

最佳答案

如果您从多个线程(具有相同的 SomeClass 引用)调用 update 方法并锁定 c,则所有线程将排队等待 c 对象的锁定。

如果您改为锁定锁对象,则每次方法调用时都会创建一个新的锁,并且每个线程将在自己的锁上进行同步(可能不是您想要的),从而加快执行速度

关于java - 在锁定对象上同步与在处理的对象上同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24280044/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com