在同一方法中同步多个块
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。
假设我在一个方法中同步了两部分代码。所以 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。