真正理解线程上下文类加载器(多案例分析)
1.线程上下文类加载器是从jdk1.2开始引入的,类Thread中的getContextClassLoader()与setContextClassLoader(ClassLoader c1),分别用来获取和设置类加载器
如果没有通过setContextClassLoader方法进行设置的话,线程将继承其父线程的上下文加载器,java应用运行时的初始线程的上下文类加载器是系统类加载器(这里是由Launcher类设置的)。在线程中运行的代码可以通过该类加载器来加载类和资源
2.线程上下文类加载器的重要性:
SPI(Service Provider Interface,服务提供者接口,指的是JDK提供标准接口,具体实现由厂商决定。例如sql)
父ClassLoader可以使用当前线程Thread.current.currentThread().getContextClassLoader()所指定的classLoader加载的类。这就改变了父ClassLoader不能使用子ClassLoader加载的类的情况,即改变了双亲委托模型。
线程上下文类加载器就是当前线程的CurrentClassloader。
在双亲委托模型下,类加载器是由下至上的,即下层的类加载器会委托上层进行加载。但是对于SPI来说,有些接口是JAVA核心库提供的,而JAVA核心库是由启动类加载器来加载的,而这些接口的实现却来自于不同的jar包(厂商提供),JAVA的启动类加载器是不会加载其他来源的jar包,这样传统的双亲委托模型就无法满足SPI的要求。而通过给当前线程设置上下文类加载器,就可以设置的上下文类加载器来实现对于接口实现类的加载。
3.线程上下文类加载器使用的一般模式:(获取-使用-还原)
伪代码:
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
try{
Thread.currentThread().setContextClassLoader(targetTccl);
excute();
} finally {
Thread.currentThread().setContextClassLoader(classLoader);
}
4.当高层提供了统一的接口让低层去实现,同时又要在高层加载(或者实例化)低层的类时,就必须要通过线程上下文类加载器来帮助高层的ClassLoader找到并加载该类
https://blog.csdn.net/mweibiao/article/details/80323324
https://blog.csdn.net/yangcheng33/article/details/52631940
真正理解线程上下文类加载器(多案例分析)相关推荐
- (二)JVM成神路之剖析Java类加载子系统、双亲委派机制及线程上下文类加载器
引言 上篇<初识Java虚拟机>文章中曾提及到:我们所编写的Java代码经过编译之后,会生成对应的class字节码文件,而在程序启动时会通过类加载子系统将这些字节码文件先装载进内存,然后再 ...
- JVM类加载理解(线程上下文类加载器、Tomcat类加载器)
类加载机制概念 Java虚拟机把描述类的class文件加载到内存,对其进行校验.转换解析.初始化等操作,最终得到可以被虚拟机直接使用的java类型,这就是虚拟机的加载机制. 主要有五个步骤: 加载 将 ...
- 利用classloader同一个项目中加载另一个同名的类_线程上下文类加载器ContextClassLoader内存泄漏隐患...
前提 今天(2020-01-18)在编写Netty相关代码的时候,从Netty源码中的ThreadDeathWatcher和GlobalEventExecutor追溯到两个和线程上下文类加载器Cont ...
- java查看上下文加载器_线程上下文类加载器
package util.tom; import java.io.*; public class ThreadClassLoader extends Thread { @Override public ...
- 重置线程中断状态_记住要重置线程上下文类加载器
重置线程中断状态 我很难思考与Java 加载有关的东西,而不是与类加载器有关的东西. 在使用应用程序服务器或OSGi的情况下尤其如此,在这些应用程序服务器或OSGi中,经常使用多个类加载器,并且透明地 ...
- 记住要重置线程上下文类加载器
我很难思考与Java 加载有关的东西,而不是与类加载器有关的东西. 在使用应用程序服务器或OSGi的情况下尤其如此,在这些应用程序服务器或OSGi中,经常使用多个类加载器,并且透明地使用类加载器的能力 ...
- java 上下文加载器_【深入理解Java虚拟机 】线程的上下文类加载器
线程上下文类加载器 线程上下文类加载器( Thread Context ClassLoader) 是从JDK1.2 引入的,类Thread 的getContextClassLoader() 与 set ...
- 深入理解JVM(6)——类加载器
虚拟机设计团队把类加载阶段中的"通过一个类的全限定名来获取描述此类的二进制字节流(即字节码)"这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类.实现 ...
- Java高并发编程详解系列-线程上下文类加载
前面的分享中提到的最多的概念就是关于类加载器的概念,但是当我们查看Thread源码的时候会发现如下的两个方法,这两个方法就是获取或者设置线程的上下文类加载器的方法,那么为什么要设置这两个方法呢?这个就 ...
最新文章
- android w700
- 什么场景应该用 MongoDB ?
- 我收集的鼠标指针样式-比较经典
- Java多线程系列--“基础篇”09之 interrupt()和线程终止方式
- python 双向链表_Python实现双向链表
- apache flume_Flume:使用Apache Flume收集客户产品搜索点击数据
- 如何将拷贝过来的数据 *.ibd 文件生效
- FreeRTOS 计数信号量
- 该网站可能含有恶意软件,有可能会危害您的电脑 清除办法
- 树莓派4B安装ffmpeg的方法
- Python爬虫基础之Urllib
- 操作系统引导详细过程
- 网络基础一(物理层)
- 四川大学计算机科学保研夏令营面试面经
- 不只是包子铺!巴比食品:重回高增长赛道,做中式面点第一品牌
- SwitchyOmega的简单使用
- 计算机视觉技术英语论文,【毕业论文】外文翻译--计算机视觉技术在工业中的应用.doc...
- 渗透测试-2022红队必备工具列表总结​
- Angular--小小调色板
- echart横坐标X轴的值竖着显示
热门文章
- Note:一些优化建议
- ssl java 客户端_Java SSL生成客户端和服务端crt文件
- synchronized原理_Synchronized 实现原理
- 转行python经验_【经验分享】转行如何自学Python并且找到工作,分享自己心得
- linux 关机 司机,Linux 关机
- index match函数的使用方法_必学函数组合INDEX+MATCH,秒杀VLOOKUP函数
- Opencv Mediapipe 人体追踪
- 用Java语言编写ajax设计模式_使用JavaScript发布订阅设计模式实现Ajax请求节流
- 请编写fun()函数,函数的功能是删去一维数组中相同的数据在一起出现的数,相同的数只保留一个
- ROS踢出无线WIFI弱信号脚本