java - 在同一方法中同步多个块
问题描述
假设我在一个方法中同步了两部分代码。所以 block1 和 block2 周围都有关键字 'synchronized',并且都使用 'this',这意味着两个块都由同一个对象锁保护。
现在如果block1正在被一个线程执行,是否意味着没有其他线程可以执行block2?
解决方案
在方法声明上同步是一样的:
public void method() {
synchronized (this) {
// method code
}
}
话虽如此,正如您在oracle 文档中看到的那样,您可以看到一个带有一些同步方法的示例,它说:
首先,同一对象上的同步方法的两次调用不可能交错。当一个线程正在为一个对象执行同步方法时,所有其他为同一对象调用同步方法的线程都会阻塞(暂停执行),直到第一个线程处理完该对象。
所以,是的,在这种情况下,没有其他线程可以执行 block2 。
推荐阅读
- python - Python:转换 pandas 数据框,使索引和列 ID 成为行的元素
- python - 定义的 Python 变量
- c# - 试图防止多次快速按下按钮,但按钮没有正确禁用
- javascript - 在父视图中触发子视图模型方法:MarionetteJs
- php - dialogflow 使用 php 客户端库更新意图训练短语
- python - 散景图未显示在 chrome 上
- arrays - 在 matlab 中有效地矢量化逐元素操作
- android - AutoCompleteTextView 函数 afterTextChanged 每次调用
- python - 将字节对象转换为 python 字典或 json 对象
- javascript - 删除一行后刷新 Boostrap-Vue 表