[英]The behavior of the classloader in multiple threads
如何理解
在多線程環境中,由於不同的類加載器,您可能會有類型轉換異常
我看到了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()作為首選?
有人告訴我,原因是在多線程中類加載器的行為可能不同
老實說,我聽不懂
Thread.currentThread()。getContextClassLoader()是自然的首選,因此不同的上下文可以可靠地設置其私有類加載器重寫。 盡管大多數情況下,額外的類加載器用於加載較低級別的類加載器未提供的類,但另一種用法是在某些情況下使用某些類的特定實現。
當這與類的類型標識包含已加載該類的類加載器的事實結合時,就有可能使兩個具有相同(絕對)類名稱的類仍然不是同一類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.