[讨论] 关于Thread.getContextClassLoader的使用场景问题

liuInsect 2013-09-23
各位大牛好:
    最经在学习tomcat的源码,反复看到一句Thread.getContextClassLoader ()的代码,在google一番还是没能彻底明白它的使用场景和方法,所以再这里发帖请教一下,希望能得到各位的答案,问题有以下几个:

1. Thread.getContextClassLoader ()获取到的classLoader和 getClass().getClassLoader()有什么却别?

2.什么场景下会用到Thread.getContextClassLoader ()方式获取classloader




希望能尽快得到答案,在此谢谢各位~
RednaxelaFX 2013-09-24
liuInsect 写道
    最经在学习tomcat的源码,反复看到一句Thread.getContextClassLoader ()的代码,在google一番还是没能彻底明白它的使用场景和方法

那恐怕是没用对关键词。随便一搜就搜到了这个:developerWorks: Java 编程的动态性,第 1 部分: 类和类装入
liuInsect 2013-09-24
RednaxelaFX 写道
liuInsect 写道
    最经在学习tomcat的源码,反复看到一句Thread.getContextClassLoader ()的代码,在google一番还是没能彻底明白它的使用场景和方法

那恐怕是没用对关键词。随便一搜就搜到了这个:developerWorks: Java 编程的动态性,第 1 部分: 类和类装入



恩 明白了,其实就是两种不同获取classloader的方式,本质上没有什么区别,对吧?
RednaxelaFX 2013-09-24
liuInsect 写道
恩 明白了,其实就是两种不同获取classloader的方式,本质上没有什么区别,对吧?

不对。这么问说明您还没明白…

Thread context class loader存在的目的主要是为了解决parent delegation机制下无法干净的解决的问题。假如有下述委派链:
ClassLoader A -> System class loader -> Extension class loader -> Bootstrap class loader

那么委派链左边的ClassLoader就可以很自然的使用右边的ClassLoader所加载的类。

但如果情况要反过来,是右边的ClassLoader所加载的代码需要反过来去找委派链靠左边的ClassLoader去加载东西怎么办呢?没辙,parent delegation是单向的,没办法反过来从右边找左边。

这种情况下就可以把某个位于委派链左边的ClassLoader设置为线程的context class loader,这样就给机会让代码不受parent delegation的委派方向的限制而加载到类了。
liuInsect 2013-09-24
RednaxelaFX 写道
liuInsect 写道
恩 明白了,其实就是两种不同获取classloader的方式,本质上没有什么区别,对吧?

不对。这么问说明您还没明白…

Thread context class loader存在的目的主要是为了解决parent delegation机制下无法干净的解决的问题。假如有下述委派链:
ClassLoader A -> System class loader -> Extension class loader -> Bootstrap class loader

那么委派链左边的ClassLoader就可以很自然的使用右边的ClassLoader所加载的类。

但如果情况要反过来,是右边的ClassLoader所加载的代码需要反过来去找委派链靠左边的ClassLoader去加载东西怎么办呢?没辙,parent delegation是单向的,没办法反过来从右边找左边。

这种情况下就可以把某个位于委派链左边的ClassLoader设置为线程的context class loader,这样就给机会让代码不受parent delegation的委派方向的限制而加载到类了。


 
收益匪浅,原来是这样的,我没想到可以使用, “左,右”的表述方式很清晰,谢谢。
谢谢撒加~
iq527 2013-10-18
http://www.ibm.com/developerworks/cn/java/j-lo-classloader/

  也可以参考下这篇文章.
Tyrion 2013-10-21
前两天刚把一篇十年前的旧文翻译了一下,讲的就是类加载器这个问题,你可以参考一下。http://tyrion.iteye.com/blog/1958814
liuInsect 2013-10-22
Tyrion 写道
前两天刚把一篇十年前的旧文翻译了一下,讲的就是类加载器这个问题,你可以参考一下。http://tyrion.iteye.com/blog/1958814


非看感谢,已经看完了。讲得非常清晰。。谢谢。。
xiaoxia19920920 2013-10-28
mark
Global site tag (gtag.js) - Google Analytics