java - JVM 中 .class 对象的同步范围

标签 java class jvm synchronization locking

假设我有以下代码:

synchronize (Test.class) {
   ...
}
  1. 这是否意味着 Test.class 对象被锁定 在同一个虚拟机中运行的其他程序?或者这样做 锁只影响 JVM 中的这一个程序?
  2. 如果它影响每个程序:当 Test.class 处于两个程序通过不同但内容相同的 JAR 包含的依赖项中时,锁是否仍会影响两个程序?

最佳答案

当您有多个类加载器时,每个类加载器都可以拥有自己的类实例(或共享类实例),例如String.class 将被共享,但 MyType.class 在每个“应用程序”中可能不同,假设每个应用程序都有自己的类加载器。

在锁定方面,Class 对象除了在static synchronised 方法中隐式使用外,并没有什么特别之处。

例如

class MyType {
    static synchronized void method() { }
}

非常相似
class MyType {
    static void method() { 
        synchronized(MyType.class) {
        }
    }
}

它执行相同的功能,尽管字节码不相同。

关于java - JVM 中 .class 对象的同步范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28659350/

相关文章:

java - 'configure' 和 'configureGlobal' 方法有什么区别?

C++ const 函数参数。有没有办法只声明函数的单一签名?

java - 如何计算方法描述符的参数数量?

constructor - 将 'this'传递给构造函数

java - MVC架构中如何使用线程?

java - 检查 Oracle BPEL 轮询数据库适配器是否正在工作

java - 方法被解释为变量

c++ - 虚函数可以内联吗

java - 比较 java.lang.Class 和 javax.lang.model.element.TypeElement 的对象

build - 在 Linux 上构建 OpenJDK 时可以设置多少个调试选项?