Thread.currentThread().getContextClassLoader() 和 Class.getClassLoader()区别
来源:互联网 发布:淘宝直通车的使用规则 编辑:程序博客网 时间:2024/05/01 22:52
查了一些资料也不是太明白两个的区别,但是前者是最安全的用法
打个简单的比方,你一个WEB程序,发布到Tomcat里面运行。
首先是执行Tomcat org.apache.catalina.startup.Bootstrap类,这时候的类加载器是ClassLoader.getSystemClassLoader()。
而我们后面的WEB程序,里面的jar、resources都是由Tomcat内部来加载的,所以你在代码中动态加载jar、资源文件的时候,首先应该是使用Thread.currentThread().getContextClassLoader()。如果你使用Test.class.getClassLoader(),可能会导致和当前线程所运行的类加载器不一致(因为Java天生的多线程)。
Test.class.getClassLoader()一般用在getResource,因为你想要获取某个资源文件的时候,这个资源文件的位置是相对固定的。
java的类加载机制(jvm规范)是委托模型,简单的说,如果一个类加载器想要加载一个类,首先它会委托给它的parent去加载,如果它的所有parent都没有成功的加载那么它才会自己亲自来,有点儿像儿子使唤老子的感觉。
如果你使用Test.class.getClassLoader(),可能会导致和当前线程所运行的类加载器不一致 :Class.getClassLoader()
returns the class loader for the class. Some implementations may use null to represent the bootstrap class loader. This method will return null in such implementations if this class was loaded by the bootstrap class loader.
- Thread.currentThread().getContextClassLoader() 和 Class.getClassLoader()区别
- Thread.currentThread().getContextClassLoader() 和 Class.getClassLoader()区别
- Thread.currentThread().getContextClassLoader() 和 Class.getClassLoader()区别
- Thread.currentThread().getContextClassLoader() 和 Class.getClassLoader()区别
- Thread.currentThread().getContextClassLoader() 和 Class.getClassLoader()区别
- Thread.currentThread().getContextClassLoader() 和 Class.getClassLoader()区别
- 区别:Thread.currentThread().getContextClassLoader() and Class.getClassLoader()
- 区别:Thread.currentThread().getContextClassLoader() and Class.getClassLoader()
- Thread.currentThread().getContextClassLoader() 和 Class.getClassLoader()的区别
- Thread.currentThread().getContextClassLoader()和Class.getClassLoader的区别
- Thread.currentThread().getContextClassLoader()与Test.class.getClassLoader()区别
- Thread.currentThread().getContextClassLoader()与Test.class.getClassLoader()区别
- Thread.currentThread().getContextClassLoader()与Test.class.getClassLoader()区别
- Thread.currentThread().getContextClassLoader()与Test.class.getClassLoader()区别
- Thread.currentThread().getContextClassLoader()与Test.class.getClassLoader()区别
- Thread.currentThread().getContextClassLoader()与Test.class.getClassLoader()区别
- Thread.currentThread().getContextClassLoader() and Class.getClassLoader()
- Thread.currentThread().getContextClassLoader() and Class.getClassLoader()
- Hbase读取数据
- 量化交易资料整理
- HTML5使用canvas绘制图形
- 【Sql Server 2008 使用篇】如何附加和分离数据库
- [九度OnlineJudge][剑指Offer]题目1510:替换空格
- Thread.currentThread().getContextClassLoader() 和 Class.getClassLoader()区别
- JAVA 常用类
- 软件生命周期的内容以及生命周期模型比较
- 【iOS 开发】Objective - C 面向对象 - 方法 | 成员变量 | 隐藏封装 | KVC | KVO | 初始化 | 多态
- BZOJ 1502 月下柠檬树 自适应辛普森积分
- HDU 5491 The Next (二进制) 2015合肥网络赛
- How To: 5 Steps to Install phpMyAdmin on Linux
- 宏的作用域
- sendmsg和recvmsg