[讨论] 关于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
|
相关讨论
相关资源推荐
- Thread.getContextClassLoader与Thread.getClassLoader()区别
- Thread.currentThread().getContextClassLoader().loadClass(className)和Class.forName(className)的区别...
- 我什么时候应该使用 THREAD.GETCONTEXTCLASSLOADER()?
- Thread.currentThread().setContextClassLoader为什么不生效与java.lang.NoClassDefFoundError之Java类加载的Parent fir...
- 深入学习java源码之Thread.sleep()与 Thread.setPriority()
- 代理模式
- 详解java动态代理机制以及使用场景(一)
- 第一章 类加载到卸载的全过程分析
- 02.Thread类的使用,线程类内部API详解
- java 上下文加载器_【Java虚拟机11】线程上下文类加载器