线程上下文类加载器分析与实现

在上一次【https://www.cnblogs.com/webor2006/p/9246850.html】分析源码中发现有两处设置线程上下文类加载器的代码,如下:

因为它是非常重要的东东,所以这次专门对它进行主题展开,主要的作用为了改变委托双亲模式在某些场景不太适用或者是无法满足需求的,下面先写一个简单的测试代码:

那输出是啥呢?

也就是说当前线程的上下文类加载器是应用类加载器,而第二输出null不足为奇,因为Thread是JDK中的系统类当然是由启动类加载器加载喽。

对于上面的例子先有一个初浅的认识既可,在正式介绍线程的上下文类加载器之前需要介绍一些理论性的东东,只有明白了它的背景这样才能更好的掌握它,具体如下:

  • 当前类加载器(Current ClassLoader):每一个类都会使用自己的类加载器(既加载自身的类加载器)来去加载其它类(指的是所依赖的类),

原文地址:https://www.cnblogs.com/webor2006/p/9248621.html

时间: 2024-10-01 21:42:12

线程上下文类加载器分析与实现的相关文章

虚拟机类加载机制(3)——线程上下文类加载器

之所以将线程上下文类加载器(Thread Context ClassLoader)单独拿出来写,确实是因为它涉及的东西比较多,既然带有线程两个字,一定也是非常重要的一个东西. 我们首先来回顾一下类加载器的双亲委派模型. 在上一章<虚拟机类加载机制(2)——类加载器>中我们解释了何为类加载器的“双亲委派模型”,知道了双亲委派模型给我们带了一个好处就是Java类随着它的类一起具备了一种带有优先级的层次关系.简单的例子就是Object类在程序的各种类加载环境中都会由启动类加载器来加载,换言之,它无论

线程上下文类加载器ContextClassLoader内存泄漏隐患

前提 今天(2020-01-18)在编写Netty相关代码的时候,从Netty源码中的ThreadDeathWatcher和GlobalEventExecutor追溯到两个和线程上下文类加载器ContextClassLoader内存泄漏相关的Issue: ThreadDeathWatcher causes custom classLoader script memory leaks Ensure ThreadDeathWatcher and GlobalEventExecutor will no

线程上下文类加载器与服务器类加载原理

双亲委派机制以及类加载器的问题 一般情况下.保证同一个类中所关联的其他类都是由当前类的类加载器所加载的. 比如,class A本身在Ext下找到.那么他里面new出来的一些类也就只能用Ext去查找了(不会低一个级别).所以有些明明App可以找到的,却找不到了. JDBC API他有实现的driver部分(mysql,sql server).我们的JDBC APl都是由Boot或者Ext来载入的.但是JDBC driver却是由Ext或者App来载入,那么就有可能找不到driver了.在Java领

线程上下文类加载器

Java 提供了很多服务提供者接口(Service Provider Interface,SPI),允许第三方为这些接口提供实现.常见的 SPI 有 JDBC.JCE.JNDI.JAXP 和 JBI 等. 这些 SPI 的接口由 Java 核心库来提供,而这些 SPI 的实现代码则是作为 Java 应用所依赖的 jar 包被包含进类路径(CLASSPATH)里.SPI接口中的代码经常需要加载具体的实现类.那么问题来了,SPI的接口是Java核心库的一部分,是由启动类加载器来加载的:SPI的实现类

类加载器分析(JVM)

最近去了解了下关于java虚拟机中的加载机制,特地写了篇blog来记忆下. 首先我们来了解下概念,什么是类加载器? A:加载器就是把java的字节码从硬盘中加载到内存,然后再做一些处理,这就是类加载器所做的一些工作 默认情况下:java有默认的三个类加载器,(树状结构)从上到下分别是bootStrap.ExtClassLoader.AppClassLoader三个加载器 本质上java的类加载器为一个java类,当然也有一个是特殊的,就比如说第一个加载器bootStrap是用C++写的 优先级是

java类加载器不完整分析

虽然之前也看过jvm相关的书籍,但是都是概念层次上的理解.今天特地花一天时间研究了下类加载器,感觉上是没有那么生疏了,但也只是冰山一角,索性就不完整地分析一番吧.内容有些长,可使用目录快速查阅. 类加载器 简单说下JVM预定义的三种类型的类加载器,这个也算是老生常谈了.当JVM启动一个项目的时候,它将缺省使用以下三种类型的类加载器: 1. 启动(Bootstrap)类加载器:负责装载<Java_Home>/lib下面的核心类库或-Xbootclasspath选项指定的jar包.由native方

JAVA类加载器概念与线程类加载器

类加载器的功能:通过一个类的全限定名来获取描述此类的二进制字节流的过程 java的类加载器大致可以分为两类,一类是系统提供的,一类是由应用开发人员编写的.系统提供的类加载器有以下三种: 引导类加载器(bootstrap class loader):用来加载 Java 的核心库(rt.jar),是用原生代码来实现的,并不继承自 java.lang.ClassLoader. 扩展类加载器(extensions class loader):用来加载 Java 的扩展库.Java 虚拟机的实现会提供一个

[读书笔记]Java类加载器

一.类与类加载器 类加载器除了在类加载阶段的作用外,还确定了对于一个类,都需要由加载它的类加载器和这个类本身一同确定其在Java虚拟机中的唯一性.通俗一点来讲,要判断两个类是否"相等",前提是这两个类必须被同一个类加载器加载,否则这个两个类不"相等". 这里指的"相等",包括类的Class对象的equals()方法.isAssignableFrom()方法.isInstance()方法.instanceof关键字等判断出来的结果. 示例:不同的类

深入理解Java类加载器(1):Java类加载原理解析

1 基本信息 每个开发人员对Java.lang.ClassNotFoundExcetpion这个异常肯定都不陌生,这背后就涉及到了java技术体系中的类加载.Java的类加载机制是技术体系中比较核心的部分,虽然和大部分开发人员直接打交道不多,但是对其背后的机理有一定理解有助于排查程序中出现的类加载失败等技术问题,对理解java虚拟机的连接模型和java语言的动态性都有很大帮助. 2 Java虚拟机类加载器结构简述 2.1 JVM三种预定义类型类加载器 我们首先看一下JVM预定义的三种类型类加载器