文章目录

  • 线程上下文类加载器(Thread Context ClassLoader)
    • 线程上下文类加载器如何破坏双亲委派模型
    • sun.misc.Launcher

线程上下文类加载器(Thread Context ClassLoader)

线程上下文件类加载器(Thread Context ClassLoader)

//设置线程上下文类加载器
通过java.lang.Thread类的setContextClassLoader(ClassLoader cl)方法来设置;

如果创建线程时还未设置上下文类加载器,那么当前线程将会从父线程中继承一个上下文类加载器,如果在应用程序的全局范围内都没有设置过的话,那这个类加载器默认就是应用程序类加载器。

线程上下文类加载器如何破坏双亲委派模型

https://www.cnblogs.com/liuligang/p/10519771.html

Java提供了很多服务提供者接口(Service Provider Interface,SPI),允许第三方为这些接口提供实现。常见的 SPI 有 JDBC、JCE、JNDI、JAXP 和 JBI 等。

这些 SPI 的接口由 Java 核心库来提供,而SPI接口中的代码经常需要加载具体的实现类;
这些实现类由 独立厂商 提供,位于 classpath下;

SPI的接口是Java核心库的一部分,是由启动类加载器(Bootstrap Classloader)来加载的;SPI的实现类是由系统类加载器(System ClassLoader)来加载的。引导类加载器是无法找到 SPI 的实现类的,因为依照双亲委派模型,BootstrapClassloader无法委派AppClassLoader来加载类。

在 SPI 接口的代码中直接使用线程上下文类加载器,就可以成功的加载到 SPI 实现的类。

sun.misc.Launcher

https://blog.csdn.net/chaofanwei2/article/details/51335278
https://blog.csdn.net/x_iya/article/details/104459985
https://blog.csdn.net/zhouhao88410234/article/details/92708723

// sun.misc.Launcher 部分源码
static class AppClassLoader extends URLClassLoader {……
}static class ExtClassLoader extends URLClassLoader {……
}

“系统类加载器AppClassLoader”、“扩展类加载器ExtClassLoader”都是位于 sun.misc.Launcher。但是它们的访问修饰符(default)导致外界无法直接访问这个加载器。

//sun.misc.Launcher部分源码
private static Launcher launcher = new Launcher(); // 注意,static修饰;
public Launcher() {Launcher.ExtClassLoader var1;try {// 构建 扩展类加载器var1 = Launcher.ExtClassLoader.getExtClassLoader();} catch (IOException var10) {throw new InternalError("Could not create extension class loader", var10);}try {// 构建 系统类加载器this.loader = Launcher.AppClassLoader.getAppClassLoader(var1); } catch (IOException var9) {throw new InternalError("Could not create application class loader", var9);}//设置线程 上下文类加载器 ,this.loader = AppClassLoader;Thread.currentThread().setContextClassLoader(this.loader);...
}

可以看到Launcher类初始化时,先初始化了个ExtClassLoader,然后又初始化了个AppClassLoader,然后把ExtClassLoader作为AppClassLoader的父loader,以及 设置 线程上下文类加载器。

Launcher类是由’启动类加载器’加载的,即 启动类加载器加载sun.misc.Launcher类,Launcher加载扩展类加载器、系统类加载器 以及 设置 线程上下文类加载器;

线程上下文类加载器(Thread Context ClassLoader)相关推荐

  1. 利用classloader同一个项目中加载另一个同名的类_线程上下文类加载器ContextClassLoader内存泄漏隐患...

    前提 今天(2020-01-18)在编写Netty相关代码的时候,从Netty源码中的ThreadDeathWatcher和GlobalEventExecutor追溯到两个和线程上下文类加载器Cont ...

  2. 重置线程中断状态_记住要重置线程上下文类加载器

    重置线程中断状态 我很难思考与Java 加载有关的东西,而不是与类加载器有关的东西. 在使用应用程序服务器或OSGi的情况下尤其如此,在这些应用程序服务器或OSGi中,经常使用多个类加载器,并且透明地 ...

  3. 记住要重置线程上下文类加载器

    我很难思考与Java 加载有关的东西,而不是与类加载器有关的东西. 在使用应用程序服务器或OSGi的情况下尤其如此,在这些应用程序服务器或OSGi中,经常使用多个类加载器,并且透明地使用类加载器的能力 ...

  4. 真正理解线程上下文类加载器(多案例分析)

    1.线程上下文类加载器是从jdk1.2开始引入的,类Thread中的getContextClassLoader()与setContextClassLoader(ClassLoader c1),分别用来 ...

  5. java查看上下文加载器_线程上下文类加载器

    package util.tom; import java.io.*; public class ThreadClassLoader extends Thread { @Override public ...

  6. JVM类加载理解(线程上下文类加载器、Tomcat类加载器)

    类加载机制概念 Java虚拟机把描述类的class文件加载到内存,对其进行校验.转换解析.初始化等操作,最终得到可以被虚拟机直接使用的java类型,这就是虚拟机的加载机制. 主要有五个步骤: 加载 将 ...

  7. (二)JVM成神路之剖析Java类加载子系统、双亲委派机制及线程上下文类加载器

    引言 上篇<初识Java虚拟机>文章中曾提及到:我们所编写的Java代码经过编译之后,会生成对应的class字节码文件,而在程序启动时会通过类加载子系统将这些字节码文件先装载进内存,然后再 ...

  8. java 上下文加载器_【深入理解Java虚拟机 】线程的上下文类加载器

    线程上下文类加载器 线程上下文类加载器( Thread Context ClassLoader) 是从JDK1.2 引入的,类Thread 的getContextClassLoader() 与 set ...

  9. Java高并发编程详解系列-线程上下文类加载

    前面的分享中提到的最多的概念就是关于类加载器的概念,但是当我们查看Thread源码的时候会发现如下的两个方法,这两个方法就是获取或者设置线程的上下文类加载器的方法,那么为什么要设置这两个方法呢?这个就 ...

  10. java 上下文加载器_如何将JDK6 ToolProvider和JavaCompiler与上下文类加载器一起使用?...

    我的用例是使用JDK 6中提供的ToolProvider和 JavaCompiler类从java程序编译生成的源文件.源文件包含对上下文类加载器中的类的引用(它在J2EE容器中运行),但不包含在系统类 ...

最新文章

  1. UWP Composition API - PullToRefresh
  2. 图像也能做情感迁移?罗切斯特大学团队提出计算机视觉新任务
  3. 盘启动盘_[装机]推荐唯二的两个开源免费的启动盘工具,轻松创建USB启动盘
  4. python简单代码表白-python浪漫表白源码
  5. jCryptoJS 、C#互通加密(MD5版)
  6. java中事务实例,Java Spring 事务管理器入门例子教程(TranscationManager)
  7. TUN/TAP设备浅析(一) -- 原理浅析
  8. O/R Mapping再乱弹
  9. M0/M3的异常和中断
  10. Python的permutations和combinations的区别
  11. 物联网测试正面临四大难关
  12. 马斯克宣布退出OpenAI,全身心投入特斯拉与SpaceX
  13. Ubiquant LGBM Baseline 九坤量化大赛 版本44
  14. R语言大作业(全国2000-2019年人口各项数据分析)
  15. 深度学习入门(一)——深度学习如何入门?
  16. 防火门行业研究及十四五规划分析报告
  17. CPU、内存、主板、显卡等是什么?计算机基本的硬件介绍,计算机组成元件
  18. BusyCal for Mac(任务日历工具)
  19. 【苹果推送】imessage软件安装iPhoneDeveloper家庭组建
  20. Echarts 柱状图,带背景色且数值显示在最顶部

热门文章

  1. 爬虫伪装请求头-fake-useragent
  2. 数学建模_混合赌博模型
  3. c++线程类 linux,C++进阶学习——线程基类的设计(Linux)
  4. C/C++[codeup 1943](大数)进制转换
  5. TensorFlow by Google Machine Learning Foundations: Ep #8 - Tokenization for Natural Language Process
  6. 自动驾驶 6-3 几何横向控制 - Stanley Geometric Lateral Control - Stanley
  7. 阿里云云计算 3 阿里云产品全家福
  8. java 遍历文件夹 性能_Java函数式编程(十一):遍历目录
  9. 反向传播算法BP公式推导
  10. python用小矩形标记数据点_Python – 在散点处绘制已知大小的矩形