gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 03:56:40 25 4
gpt4 key购买 nike

假设我有以下代码:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com