InheritableThreadLocal值继承

public class Test1 extends InheritableThreadLocal{
    @Override
    protected Object initialValue() {
        return Thread.currentThread().getName()+"--默认值";
    }
    @Override
    protected Object childValue(Object parentValue) {
        return "("+parentValue+")--childvalue("+Thread.currentThread().getName()+")";
    }
    public static void main(String[] args) {
        Test1 test1 = new Test1();
        Thread t2 = new Thread(new Runnable() {
            @Override
            public void run() {
                test1.set("T2--run");
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        for (int i = 0; i < 10; i++) {
                            test1.set("hhhhh");
                            System.out.println(Thread.currentThread().getName()+"--"+test1.get());
                            try {
                                Thread.sleep(1000);
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                        }
                    }
                },"T3").start();
            }
        },"T2");
        t2.start();
    }
}

test1.get()获取值得优先级顺序:
子线程T3自己set了值(可以是null)时,T3中get()获取的是自己set的值 -->
子线程没有set值时,子线程T3中get()获取的值为Test1类重写后的childValue()方法返回的值-->
如果Test1类没有重写childValue()方法,T3中get()获取的为父线程中set的值-->
如果父线程也没有set值,则获取Test1类中的initialValue方法返回值(没重写该方法则默认返回null)

你可能感兴趣的:(InheritableThreadLocal值继承)