首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在锁对象上同步与在处理的对象上同步

在锁对象上同步与在处理的对象上同步
EN

Stack Overflow用户
提问于 2014-06-18 15:59:04
回答 1查看 48关注 0票数 1

this Q的代码中,

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

代码语言:javascript
复制
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());
            }
        }  
}  

为什么会这样呢?

提亚

//=

编辑:

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

EN

回答 1

Stack Overflow用户

发布于 2014-06-18 16:05:16

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24280044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档