1

I'm wondering why Java introduced contexClassLoader for threads. I know that it is usualy used by frameworks and application servers which have to dynamically find and load classes.

However I don't understand why Java introduced contexClassLoader when we can achieve the same functionality simply by adding field that will hold necessary class loader.

class ThreadWithCustomClassloader extends Thread
{
    ClassLoader threadClassLoader;

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

2 回答 2

0

我很困惑 - 类加载器的实例变量正是 Thread 类用来实现它的。你的解决方案有什么不同?

你介意二传手吗?设置类加载器对于能够为完全不同的环境(Web 应用程序)重用相同的线程(例如,在 servlet 容器中)非常重要。线程实例被认为是昂贵的......

于 2012-05-10T13:11:39.460 回答
0

JVM 中默认的类加载器机制是父委托,线程上下文类加载器围绕类加载委托方案提供了一个后门。 以 JNDI 为例:它的核心由 rt.jar 中的引导类实现(从 J2SE 1.3 开始),但这些核心 JNDI 类可能会加载由独立供应商实现的 JNDI 提供程序,并可能部署在应用程序的 -classpath 中。这种情况需要一个父类加载器(在这种情况下是原始类加载器)加载一个对其子类加载器之一可见的类(例如,系统类加载器)。正常的 J2SE 委派不起作用,解决方法是让核心 JNDI 类使用线程上下文加载器,从而有效地通过类加载器层次结构在与正确委派相反的方向“隧道”。

有关更多信息,请检查您应该使用哪个类加载器

于 2016-12-13T10:40:24.880 回答