java - 在同一方法中同步多个 block

标签 java multithreading synchronized

这个问题在这里已经有了答案:





Java synchronize block on same object in different methods

(2 个回答)


1年前关闭。




假设我在一个方法中同步了两部分代码。所以 block1 和 block2 周围都有关键字 'synchronized',并且都使用 'this',这意味着两个 block 都由同一个对象锁保护。
现在如果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 。

关于java - 在同一方法中同步多个 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62738571/

相关文章:

java - 如何检测文本中使用了哪种Apple Emoji?

WPF 后台线程调用

java - java中的同步和代码重新排序

java - c 中是否有类似于 Reflection API 的东西,并且注释在 java 中?

java - 正则表达式匹配方括号或双引号中的字符串

java - 无法使装饰器模式工作

java - 加快对mysql的操作

python - 在 Python Asyncio 中限制异步函数

Java AWT drawImage 竞争条件 - 如何使用同步来避免它

java - GWT——服务器端同步块(synchronized block)