在此对象和其他对象上同步

用户名

我认为这个问题一定是在某个地方提出的,但是当我寻找它时,不幸的是我只找到了不同的主题。无论如何,这里是代码:

public class A {
    Object lockX = new Object();
    Object lockY = new Object();
    Object lockZ = new Object();
    int c1;
    int c2;

    public void foo1() {
        synchronized(lockX) {
            c1++;
        }
    }

    public void bar1() {
        synchronized(lockY) {
            c1++;
        }
    }

    public void foo2() {
        synchronized(lockZ) {
            c2++;
        }
    }

    public void bar2() {
        synchronized(this) {
            c2++;
        }
    }
}

基本上foo1和bar1不正确。它们使用不同的锁来保护c1,因此实际上c1不会受到保护,并且这两个函数可以同时运行。但是我的问题是关于foo2和bar2的。还可以吗 他们还使用不同的锁,但是bar2锁定了整个对象,因此它可以防止同时修改c2吗?

马克·托波尼克(Marko Topolnik)

bar2锁定整个对象

一旦正确理解了互斥锁(互斥体的语义,您将意识到这是一个空语句。互斥锁没有任何固有的作用域:线程在任何时间点都拥有或不拥有它。同步this仅获取与this实例关联的互斥量同步lockZ获取一个完全独立的互斥锁,并且两者可以同时获取。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

引用变量和其他形式的对象

来自分类Dev

JSON和对其他JSON对象的引用

来自分类Dev

引用变量和其他形式的对象

来自分类Dev

链接范围和访问其他对象

来自分类Dev

JSON和对其他JSON对象的引用

来自分类Dev

在多个对象上同步

来自分类Dev

类对象上的同步

来自分类Dev

如何实例化和使用包含其他对象的对象?

来自分类Dev

在HashMap值对象上同步

来自分类Dev

Java:在String对象上同步

来自分类Dev

在以其他方法创建的对象上使用

来自分类Dev

在JavaScript或Json上获取其他数据对象

来自分类Dev

选择除Windows上的套接字以外的其他对象

来自分类Dev

查询包含在其他对象上的领域数据

来自分类Dev

同步方法和同步对象的不同输出

来自分类Dev

Java同步和对象锁定

来自分类Dev

从ajax发送formData和其他对象到PHP

来自分类Dev

使用Ember快速添加和推送其他对象

来自分类Dev

区分空对象类型和其他具体类型

来自分类Dev

从ajax发送formData和其他对象到PHP

来自分类Dev

访问其他Java类中的SharedPreference和Editor对象

来自分类Dev

使用Ember即时添加和推送其他对象

来自分类Dev

选择按钮时隐藏视图和其他对象

来自分类Dev

从其他对象获取数组属性和值

来自分类Dev

如何引用和计算 Javascript 对象的其他部分?

来自分类Dev

如果使用不同的对象进行同步,更改是否对其他线程可见?

来自分类Dev

Python中包含其他对象的对象

来自分类Dev

从其他对象中获取对象

来自分类Dev

多线程访问同一对象上的同步方法和非同步方法