InheritableThreadLocal使用(二)只在子线程创建的时候,继承一次

package thread.local;

public class Test
{
    // 线程局部变量:初始值默认是null
    private final static InheritableThreadLocal<String> basicholder = new InheritableThreadLocal<String>();

    // 存放的是引用
    private final static InheritableThreadLocal<StringBuilder> referHolder = new InheritableThreadLocal<StringBuilder>();

    public static void main(String[] args) throws Exception
    {
        basicholder.set("parent initial value");
        referHolder.set(new StringBuilder("reference"));
        
        Thread a = new Thread()
        {
            public void run()
            {

                for (int i = 0; i < 2; i++)
                {
                    // 子线程能够获得父线程的值
                    System.out.println("child-thread-begin=" + basicholder.get());
                    System.out.println("child-thread-begin2=" + referHolder.get());

                    try
                    {
                        Thread.sleep(200);
                    }
                    catch (InterruptedException e)
                    {

                    }
                }

            }
        };

        a.start();

        Thread.sleep(100);
        basicholder.set("parent reset this value");
        referHolder.get().append(" new value");
        System.out.println("end=" + basicholder.get());
        System.out.println("end=" + referHolder.get());
    }
}

 

执行结果:

child-thread-begin=parent initial value
child-thread-begin2=reference
end=parent reset this value
end=reference new value
child-thread-begin=parent initial value
child-thread-begin2=reference new value

创建子线程的时候,子线程会继承InheritableThreadLocal中父线程此刻的值,但是只会在创建的时候继承一次。如果在子线程的生命周期内,父线程修改了自己的线程局部变量值,子线程再次读取,获取的仍然是第一次读取的值。即:子线程继承父线程的值,只是在线程创建的时候继承一次。之后子线程与后父线程便相互独立。

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值