首页 > 解决方案 > 在同一方法中同步多个块

问题描述

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

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

标签: javamultithreadingsynchronized

解决方案


在方法声明上同步是一样的:

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

话虽如此,正如您在oracle 文档中看到的那样,您可以看到一个带有一些同步方法的示例,它说:

首先,同一对象上的同步方法的两次调用不可能交错。当一个线程正在为一个对象执行同步方法时,所有其他为同一对象调用同步方法的线程都会阻塞(暂停执行),直到第一个线程处理完该对象。

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


推荐阅读