簡體   English   中英

為什么我們需要contexClassLoader

[英]Why do we need contexClassLoader

我想知道為什么Java為線程引入了contexClassLoader。 我知道框架和應用程序服務器通常使用它來動態查找和加載類。

但是,我不明白為什么Java僅通過添加將容納必要類加載器的字段來實現相同功能時Java引入contexClassLoader的原因。

class ThreadWithCustomClassloader extends Thread
{
    ClassLoader threadClassLoader;

    public void run()
    {
       //use threadClassLoader to dynamically find and load classes
    }
}

我很困惑-為類加載器提供一個實例變量正是Thread類用來實現此目的的。 您的解決方案有什么不同?

您介意二傳手嗎? 設置類加載器對於能夠在完全不同的環境(Web應用程序)中重用同一線程(例如,在Servlet容器中)很重要。 線程實例被認為是昂貴的...

JVM中的默認類加載器機制是父級委派,線程上下文類加載器為類加載委派方案提供了后門。 以JNDI為例:其膽量是通過rt.jar中的引導程序類實現的(從J2SE 1.3開始),但是這些核心JNDI類可能會加載由獨立供應商實現的JNDI提供程序,並且可能部署在應用程序的-classpath中。 這種情況要求父類加載器(在這種情況下為原始類加載器)加載對其子類加載器之一可見的類(例如,系統類)。 普通的J2SE委派不起作用,解決方法是使核心JNDI類使用線程上下文加載器 ,從而沿着與正確的委派相反的方向有效地“隧道化”通過類加載器層次結構。

有關更多信息,請檢查您應該使用哪個類加載器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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