gpt4 book ai didi

java - Jave 如何防止并发类初始化发生?

转载 作者:行者123 更新时间:2023-11-29 08:32:39 25 4
gpt4 key购买 nike

Java 类在每个 JVM 中仅在首次加载时初始化一次。而且我认为多个线程可以尝试同时加载同一个类。 JVM 如何处理这种争用?有没有什么机制可以防止这种情况发生,比如锁?

最佳答案

首先,以下说法不准确:

A java class is initialized only once per one jvm

每个类加载器都会初始化一个Java类。一个 JVM 实例很可能有多个类加载器,每个类加载器分别加载同一个类。

回答这个问题 - 是的,类加载器在加载类时必须锁定。例如,如果您查看 OpenJDK 9 的 java.lang.ClassLoader 实现,加载类最终将归结为以下方法(添加注释以强调锁定):

final Class<?> loadClass(Module module, String name) {
synchronized (getClassLoadingLock(name)) { // Note the locking here!
// First, check if the class has already been loaded
Class<?> c = findLoadedClass(name);
if (c == null) {
c = findClass(module.getName(), name);
}
if (c != null && c.getModule() == module) {
return c;
} else {
return null;
}
}
}

关于java - Jave 如何防止并发类初始化发生?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46670052/

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