在同一方法中同步多个块

Synchronizing multiple blocks within same method

假设我在一个方法中同步了两部分代码。所以 block1 和 block2 每个都有关键字 'synchronized',并且都使用 'this',这意味着两个块都由相同的对象锁保护。

现在如果一个线程正在执行block1,是否意味着没有其他线程可以执行block2?

在方法声明上同步与:

public void method() {
    synchronized (this) {
       // method code
    }
}

话虽如此,正如您在 oracle docs 中看到的,您可以看到一个包含一些同步方法的示例,它说:

First, it is not possible for two invocations of synchronized methods on the same object to interleave. When one thread is executing a synchronized method for an object, all other threads that invoke synchronized methods for the same object block (suspend execution) until the first thread is done with the object.

所以,是的,在那种情况下没有其他线程可以执行 block2。