【发布时间】:2019-01-18 20:46:17
【问题描述】:
如何理解
在多线程环境中,由于类加载器不同,您可能会遇到类型转换异常
我看到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() 作为首选?
有人告诉我导致类加载器的行为在多线程中可能会有所不同
说实话,我看不懂
【问题讨论】:
-
请显示该声明来源的链接以及您可以提供的任何相关背景/背景信息
-
“有人告诉我,因为类加载器的行为在多线程中可能会有所不同”——他们没有错,但你引用的 sn-p 非常令人困惑。 多类加载器 环境是问题的常见来源,而不是多线程。将不同的类加载器与不同的线程相关联很少会导致问题(除非这些类加载器本身有问题)。但是拥有多个类加载器确实会导致各种问题。
标签: java multithreading jvm classloader