Java线程类void setContextClassLoader(ClassLoader loader)方法与示例

线程类void setContextClassLoader(ClassLoader loader)

  • 包java.lang.Thread.setContextClassLoader(ClassLoader loader)中提供了此方法。

  • 此方法用于为此(当前)线程设置上下文ClassLoader。

  • 可以在创建线程时设置上下文ClassLoader,通过该上下文,线程创建者可以访问线程并提供适当的类加载器,以在类加载时在程序中运行代码。

  • 该方法不是静态的,因此该方法可通过Thread类对象访问,而无法通过类名称访问。

  • 此方法的返回类型为void,因此它不返回任何内容。

  • 如果此线程无法设置上下文ClassLoader,则此方法引发异常(SecurityException)。

语法:

    void setContextClassLoader(ClassLoader loader){
    }

参数:

我们仅在Thread方法中传递一个对象作为参数,并且该参数是此线程的上下文ClassLoader。

返回值:

此方法的返回类型为void,它不返回任何内容。

Java程序演示setContextClassLoader()方法示例

/*  We will use Thread class methods so we are importing 
    the package but it is not mandate because 
    it is imported by default
*/

import java.lang.Thread;

class SetContextClassLoader extends Thread {
    // Override run() of Thread class
    public void run() {
        //显示最终用户的消息 	
        System.out.println("The name of this thread is " + " " + Thread.currentThread().getName());
    }

    public static void main(String[] args) {
        //创建一个SetContextClassLoader类的对象
        SetContextClassLoader ccl = new SetContextClassLoader();

        //创建Thread类的对象
        Thread th = new Thread(ccl);

        //Thread类start()方法将调用
        th.start();

        // getContextClassLoader() will return context ClassLoader 
        //并创建ClassLoader的引用
        ClassLoader cl = th.getContextClassLoader();

        //通过使用setContextClassLoader(ClassLoader cl)设置 
        //此线程的上下文ClassLoader-
        th.setContextClassLoader(cl);

        System.out.println("The Context ClassLoader for this thread th is = " + cl);
        System.out.println("The Parent of the ClassLoader is = " + cl.getParent());
        System.out.println("The Class of the ClassLoader is = " + cl.getClass());
    }
}

输出结果

E:\Programs>javac SetContextClassLoader.java

E:\Programs>java SetContextClassLoader
The Context ClassLoader for this thread th is = [email protected]

The name of this thread is  Thread-1

The Parent of the ClassLoader is = [email protected]

The Class of the ClassLoader is = class sun.misc.Launcher$AppClassLoader