28-現実をどうするスレッドコンテキストクラスローダの性質を分析

現実に実行するスレッドコンテキストクラスローダの性質の分析

1.スレッドコンテキストクラスローダ

  • ランチャークラス:スレッドのコンテキストクラスローダは、主に起因して、システムのデフォルトのクラスローダであります:

    Thread.currentThread()setContextClassLoader(this.loader);.パラメータとしてローダー、ローダーを作成した後、直接に入ります

  • 例1:

    • public class MyTest25 implements Runnable{
          private Thread thread;
      
          public MyTest25(){
              thread = new Thread(this);
              thread.start();
          }
          @Override
          public void run() {
              ClassLoader classLoader = this.thread.getContextClassLoader();
              this.thread.setContextClassLoader(classLoader);
      
              System.out.println("Class: "+classLoader.getClass());
              System.out.println("Parent: "+classLoader.getParent().getClass());
          }
          public static void main(String[] args) {
             new MyTest25();
          }
      }
      运行结果:
         Class: class sun.misc.Launcher$AppClassLoader   //线程上下文类加载器默认是系统类加载器
         Parent: class sun.misc.Launcher$ExtClassLoader
      

2.スレッドコンテキストクラスローダを使用する通常のパターン(取得 - 用途 - 還元)

ClassLoader classLoader = Thread.currentThread().getContextClassLoader();  //获取
try{
	Thread.currentThread.setContextClassLoader(targetTccl); //设置
   myMethod(); //使用
}finally{
	Thread.currentThread.setContextClassLoader(classLoader); //还原
}
  • 要約:

    1. )にThread.currentThread()。getContextClassLoader(と呼ばれるMyMethodはは、現在のスレッドのコンテキストクラスローダが特定の物事を行うために取得します。
    2. クラスローダがクラスAをロードする場合は(ない場合は、それに依存するクラスの前に、ローダ上)、そのクラスに依存するクラスが同じクラスローダによってロードされています
    3. ★ContextClassloaderと効果はJavaのクラスローディング委譲メカニズムを弱体化することです。
    4. ★幹部は、クラスのボトムレベルにロード(またはインスタンス化)しつつ、底が達成することを可能にする統一されたインタフェースを提供する時、それは見つけてクラスをロードするためにスレッドコンテキストClassLoaderクラスローダによってヘルプ幹部に必要です。
公開された25元の記事 ウォンの賞賛0 ビュー1445

おすすめ

転載: blog.csdn.net/qq_40574305/article/details/104793588