Java同步/锁定

Ben*_*ole 2 java concurrency locking

我对Java的并发性比较陌生(还没有阅读JCIP,但它在我的列表中!)我有一个关于锁定行为的问题.具体来说,Java是锁定对象的引用还是对象本身?

代码示例(不是sscce,因为我不知道如何在实践中演示这种行为):

static final Object lockA = new Object();

public void method1() {
    synchronized(lockA) {
        // do stuff here
    }
}

public void method2() {
    Object lockB = lockA;
    synchronized(lockB) {
        // do stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

如果另一个线程正在执行method1()(因此锁定lockA),是否method2()允许执行?

谢谢!

Jac*_*nds 6

在对象上进行同步,因此synchronized块method2将需要等待synchronized块method1完成.

每个对象都有一个与其关联的"内部锁"(请参阅内部锁定和同步).synchronized块使用与要同步的对象关联的内部锁.