27- 쓰레드 컨텍스트 클래스 로더 분석 및 구현

스레드 컨텍스트 클래스 로더 분석 및 구현

예 하나 :
public class MyTest24 {
    public static void main(String[] args) {
        System.out.println(Thread.currentThread().getContextClassLoader()); //这个当前main线程
        System.out.println(Thread.class.getClassLoader());  //Thread类位于rt包中
    }
}
运行结果:
   sun.misc.Launcher$AppClassLoader@18b4aac2
   null
현재 클래스 로더 (현재 클래스 로더)
  • 각 클래스는, (종속 클래스 참조) 다른 클래스를로드하기 위해서 자신의 클래스 로더 (즉, 로더의 자신의 클래스 로더를) 사용
    예 : ClassX는 고급, 뒷면에 다음 ClassX 클래스 로더를 인용하는 경우 로더 품위 (품위가 아직로드되지한다)
클래스 로더 스레드 컨텍스트 (문맥 클래스 로더)
  • 도입의 시작에서 스레드 컨텍스트 클래스 로더 JDK 1.2, Thread 클래스의 getContextClassLoader ()와 setContextClassLoader (클래스 로더 C1) 각각 취득 및 설정 문맥 클래스 로더합니다.
  • setContextClassLoader (클래스 로더 C1)를 통해 설정되어 있지 않은 경우, 스레드는 부모 컨텍스트 클래스 로더 스레드를 상속합니다. 초기 스레드 자바 애플리케이션 런타임 컨텍스트 로더는 시스템 클래스 로더이다 . 스레드에서 실행되는 코드는 클래스 및 리소스 클래스 로더에 의해로드 할 수있다.
  • 컨텍스트 로더의 중요성을 스레드 :
    • SPI (서비스 공급자 인터페이스)
    • 클래스 [현재 스레드는 Thread.currentThread를 사용하여 상위 클래스 로더 (). GetContextClassLoader 클래스 로더 부하 ()를 실행]. **이 부모 위임 모델을 변화 클래스 로더 클래스 로더는 자녀 또는 다른 부모 - 자식 관계를 직접로드되지 않은 클래스를 사용할 수없는 상황 클래스 로더의 부모, **을 변경합니다.
  • 쓰레드 컨텍스트 클래스 로더는 현재의 thread 현재 클래스 로더이다
    • 즉 상위 위임 모델, 하부 로딩 형에서는, 하부, 상부, 클래스 로더는 부하에 의뢰. 그러나 일부 인터페이스에 대한 SPI에 대한 자바 코어 라이브러리를 제공하고, 부하에 클래스 로더를 시작하여 자바 코어 라이브러리,이 인터페이스를 구현하지만 다른 항아리 패키지 (공급 업체)에서, 자바입니다 부모가 기존 모델 SPI의 요구 사항을 충족 할 수 위탁 그래서, 다른 근원이다 로더 항아리 패키지를 수행 로더 클래스를 시작합니다. 현재의 클래스 로더 컨텍스트에 대한 스레드 설정을 통해, 문맥이 인터페이스를 구현하고있는로드의 클래스 로더에 제공 될 수 있습니다.
게시 25 개 원래 기사 · 원의 칭찬 0 · 조회수 1446

추천

출처blog.csdn.net/qq_40574305/article/details/104793573