簡體   English   中英

類加載器在多個線程中的行為

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM