ThreadLocal plus

本文介绍了ThreadLocal和InheritableThreadLocal的区别,并通过代码示例展示了它们在子线程中如何处理变量继承。在主线程中,两者都设置了值,但当创建新的子线程时,InheritableThreadLocal的值会被继承,而ThreadLocal的值不会。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ThreadLocal 很多人都用过,今天是升级版的InheritableThreadLocal,具体有什么区别,demo看效果就知道了。

public static void main(String[] args) {
        String name="小明";
        ThreadLocalContext.getContext().setValue(name);
        InheritableThreadLocalContext.getContext().setValue(name);
        System.out.println("******************"+ThreadLocalContext.getContext().getValue());
        System.out.println("******************"+InheritableThreadLocalContext.getContext().getValue());
        new Thread(()->{
            System.out.println("---------------------"+ThreadLocalContext.getContext().getValue());
            System.out.println("---------------------"+InheritableThreadLocalContext.getContext().getValue());
        }).start();
    }

在这里插入图片描述
两个实例顺便附上

public class ThreadLocalContext {

    private ThreadLocalContext(){}

    /**
     * 实例化对象
     */
    private static final ThreadLocalContext context = new ThreadLocalContext();

    public static ThreadLocalContext getContext(){
        return context;
    }

    private static final ThreadLocal<String> myLocal = new ThreadLocal<>();

    /**
     * 设置对象
     * @param value
     */
    public void setValue(String value){
        myLocal.set(value);
    }

    /**
     * 获取对象
     * @return
     */
    public String getValue(){
        return myLocal.get();
    }

    /**
     * 移除对象
     */
    public void remove(){
        myLocal.remove();
    }
}
public class InheritableThreadLocalContext {

    private InheritableThreadLocalContext(){}

    private static final  InheritableThreadLocalContext context = new InheritableThreadLocalContext();

    public static InheritableThreadLocalContext getContext(){
        return context;
    }

    private static final InheritableThreadLocal<String> myLocal = new InheritableThreadLocal();

    /**
     * 设置对象
     * @param value
     */
    public void setValue(String value){
        myLocal.set(value);
    }

    /**
     * 获取对象
     * @return
     */
    public String getValue(){
        return myLocal.get();
    }

    /**
     * 移除对象
     */
    public void remove(){
        myLocal.remove();
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值