2 u011313384 u011313384 于 2017.09.11 16:55 提问

java 两个临界区是否公用一个锁

public class SignUtil {
private Object count = 0;
private Object count2 = 0;

public void incr() {
    synchronized (count) {
        for (int i = 0; i < 100; i++) {
            System.out.println("1111111111111111111111111");
            System.out.println("2222222222222222222222222");
            System.out.println("3333333333333333333333333");
            System.out.println("44444444444444444444444444");
            System.out.println("55555555555555555555555555");
        }
    }
}

public void incr2() {
    synchronized (count2) {
        for (int i = 0; i < 100; i++) {
            System.out.println("------------------------");
        }
    }
}

用两个线程分别调用incr()和incr2(),在incr执行完前不会执行incr2,锁住的是两个不同对象,但怀疑共用一把锁,请知道的人解释下

2个回答

zy841958835
zy841958835   Ds   Rxr 2017.09.11 17:12
已采纳

同步是针对对象和类来说的。一个对象上的所有同步块只能被一个线程锁住。其他所有的线程试图访问同步块的方法,都要等到占用资源的线程释放了才能访问
你的两个线程是不是访问的一个对象的 incr incr2方法

u011313384
u011313384 谢回答,是访问的一个对象的
2 个月之前 回复
qq_37467401
qq_37467401   2017.09.11 17:53

一个类只有一把锁吧。

Csdn user default icon
上传中...
上传图片
插入图片