java-ContextClassLoader的意义

Thread的实现化过程:

public Thread() {
    init(null, null, "Thread-" + nextThreadNum(), 0);
}
private void init(ThreadGroup g, Runnable target, String name,
                  long stackSize) {
    init(g, target, name, stackSize, null);
}

private void init(ThreadGroup g, Runnable target, String name,
                  long stackSize, AccessControlContext acc) {
   ....

 if (security == null || isCCLOverridden(parent.getClass()))

//下面是关键两行:
 this.contextClassLoader = parent.getContextClassLoader();
    else
  this.contextClassLoader = parent.contextClassLoader;  
 
//从上面可以看出,具有父子关系(不是继承关系)的线程的ContextClassLoader都一样,在一般的应用
//都是由main线程衍生出许多子线程,所以他们的ContextClassLoader都一样。

   this.inheritedAccessControlContext =
            acc != null ? acc : AccessController.getContext();
    this.target = target;
    setPriority(priority);
    if (parent.inheritableThreadLocals != null)
        this.inheritableThreadLocals =
            ThreadLocal.createInheritedMap(parent.inheritableThreadLocals);
    /* Stash the specified stack size in case the VM cares */
    this.stackSize = stackSize;

    /* Set thread ID */
    tid = nextThreadID();
}


那么ContextClassLoader的意义何在?

父Classloader可以使用当前线程Thread.currentthread().getContextLoader()中指定的classloader中加载的类。
颠覆了父ClassLoader不能使用子Classloader或者是其它没有直接父子关系的Classloader中加载的类这种情况。
这个就是Context Class Loader的意义
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值