有什么区别?
Class.getClassLoader()和Thread.getContextClassLoader()?
从这个线程:
Class.getClassLoader()
返回ClassLoader
加载调用它的类.
Thread.getContextClassLoader()
返回ClassLoader
集合作为调用它的上下文ClassLoader
,如果调用了Thread的方法Thread
,则可以与ClassLoader
加载Thread类本身的上下文不同setContextClassLoader(ClassLoader)
.这可以用于允许启动线程的对象指定
ClassLoader
在线程中运行的对象应该使用,但是这些对象中的一些对象的协作是必需的.
所以如果你想知道为什么有3个API调用
Thread.getContextClassLoader() Thread .getClassLoader() Class .getClassLoader()
,你可以在这里找到一个走出ClassLoader迷宫的出路.
为什么首先存在线程上下文类加载器?它们在J2SE中引入而没有大张旗鼓.Sun Microsystems缺乏适当的指导和文档可能解释了为什么许多开发人员发现它们令人困惑.
事实上,上下文类加载器为J2SE中引入的类加载委托方案提供了一个后门.通常,JVM中的所有类加载器都按层次结构组织,这样每个类加载器(引导整个JVM的原始类加载器除外)都有一个父类.
[...]
更糟糕的是,某些应用程序服务器将上下文和当前类加载器设置为具有相同类路径但尚未作为委托父级和子级相关的不同ClassLoader实例.