java - 为什么 synchronized(this) 有效?

标签 java

两个线程的“this”对象是不同的,因为它们是两个不同的对象。所以他们正在检查两个不同的锁,所以没有什么可以阻止他们并行运行关键部分:

void method() {
    synchronized(this) {
        //critical section
    }
}

我错过了什么?

最佳答案

如果您有临界区,它通常涉及单个对象。在这些情况下,如果两个不同的实例并行运行,则不存在竞争条件,假设它们仅适用于实例本地资源,例如私有(private)字段。

您可能错过的是,如果相同类型的对象在共享资源上工作,synchronized(this) 确实不会阻止它们并行访问它。在这种情况下,您可以使用 synchronized(MyFoo.class) { } 或共享变量在类本身上进行同步。

关于java - 为什么 synchronized(this) 有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27872904/

相关文章:

java - 如何更改全部大写的字符串以利用第一个字母然后是每个空格后面的第一个字母? ( java )

java - 我不知道为什么最后一种情况(默认)不起作用

java - spring mvc中生成文件流程更新

java - 从 Url java 读取 JSON

java - 需要帮助调试: Append two ArrayLists using Method - Java

java - REST 调用以将大型结果集保存到可下载的 CSV

java - EJB 规范违规 : The message driven bean must declare one onMessage() method

java - 对象数组的数组(二维数组)JNI

java - 如何在 JAX-WS 中控制 JAXBContext?

java - 从 HttpPost Android 中提取 URL