如何理解
在多线程环境中,由于不同的类加载器,您可能会有类型转换异常
我看到了Spring的源代码:
public static ClassLoader getDefaultClassLoader() {
ClassLoader classLoader = null;
try {
classLoader = Thread.currentThread().getContextClassLoader();
} catch (Throwable ex) {
ex.printStackTrace();
}
if (classLoader == null) {
// No thread context class loader -> use class loader of this class
classLoader = ClassUtil.class.getClassLoader();
if (classLoader == null) {
// getClassLoader() returning null indicates the bootstrap ClassLoader
try {
classLoader = ClassLoader.getSystemClassLoader();
} catch (Throwable ex) {
}
}
}
return classLoader;
}
我不为什么他们选择Thread.currentThread()。getContextClassLoader()作为首选?
有人告诉我,导致类加载器在多线程中的行为可能不同
说实话,我听不懂
答案 0 :(得分:0)
Thread.currentThread()。getContextClassLoader()是自然的首选,因此不同的上下文可以可靠地设置其私有类加载器重写。尽管大多数情况下,额外的类加载器用于加载较低级别的类加载器未提供的类,但另一种用途是在某些情况下使用某些类的特定实现。
当这与类的类型标识包含已加载该类的类加载器这一事实结合时,就有可能使两个具有相同(绝对)类名称的类仍然不具有相同的类型。 / p>