Java 类加载器应该是线程安全的吗?

Java 类加载器应该是线程安全的吗?,java,classloader,Java,Classloader,我正在编写我的自定义类加载器,我想知道是否应该使其线程安全? 正如您很容易看到的,并不是所有的原生Java类加载器都是线程安全的,只有sun.misc.Launcher.AppClassLoader是线程安全的(然而,我已经检查了OpenJDK源代码,而在OpenJDK中不是) java类加载器不同步有什么原因吗? 自定义类加载器是否应该是线程安全的?类加载器。loadClass()已同步 通常,自定义类加载器不会覆盖此方法,但它可能会覆盖findClass()。由于findClass()由lo

我正在编写我的自定义类加载器,我想知道是否应该使其线程安全? 正如您很容易看到的,并不是所有的原生Java类加载器都是线程安全的,只有sun.misc.Launcher.AppClassLoader是线程安全的(然而,我已经检查了OpenJDK源代码,而在OpenJDK中不是)

java类加载器不同步有什么原因吗?
自定义类加载器是否应该是线程安全的?

类加载器。loadClass()已同步


通常,自定义类加载器不会覆盖此方法,但它可能会覆盖
findClass()
。由于
findClass()
loadClass
调用,因此从同步的关键部分调用,因此它本身不需要同步

告诉哪些类加载器不是线程安全的(是的,类加载器必须是线程安全的)使用synchronized本身并不能使某些东西成为线程安全的。考虑到有多少不同的JVM使用同一个类加载器从多个线程加载类,我想说,它肯定是线程安全的。然而,线程安全性的实现方式可能与您期望的方式不同。事实上,要实现WebApp类加载器,必须重写loadClass。真正的同步方法是:
private synchronized Class loadClassInternal(字符串名)
这是多年来的主要抱怨:因为我直接调用findcals->loadClass chain,我想它必须与loadClassInternal在同一个对象上同步。我还没有找到loadClassInternal Callssory背后的细节,只是重新检查了一下,findClass是同步的,所以只要我只覆盖findClass,就不会有任何混淆。谢谢