package test;import java.util.Date;public class InheritableThreadLocalExt extends InheritableThreadLocal<Object>{@Overrideprotected Object initialValue() {return new Date().getTime();}@Overrideprotected Object childValue(Object parentValue) {return parentValue + " insert at child thread.";}}
package test;public class Tools {public static InheritableThreadLocalExt tl = new InheritableThreadLocalExt();}
package test;public class ThreadA extends Thread {@Overridepublic void run() {try {for (int i = 0; i < 10; i++) {System.out.println("from ThreadA get value=" + Tools.tl.get());Thread.sleep(100);}} catch (InterruptedException e) {e.printStackTrace();}}}
package test;public class Run {public static void main(String[] args) {try {for (int i = 0; i < 10; i++) {System.out.println("from Main get value=" + Tools.tl.get());Thread.sleep(100);}Thread.sleep(5000L);ThreadA a = new ThreadA();a.start();} catch (InterruptedException e) {e.printStackTrace();}}}
輸出:
from Main get value=1514531585175
from Main get value=1514531585175
from Main get value=1514531585175
from Main get value=1514531585175
from Main get value=1514531585175
from Main get value=1514531585175
from Main get value=1514531585175
from Main get value=1514531585175
from Main get value=1514531585175
from Main get value=1514531585175
from ThreadA get value=1514531585175 insert at child thread.
from ThreadA get value=1514531585175 insert at child thread.
from ThreadA get value=1514531585175 insert at child thread.
from ThreadA get value=1514531585175 insert at child thread.
from ThreadA get value=1514531585175 insert at child thread.
from ThreadA get value=1514531585175 insert at child thread.
from ThreadA get value=1514531585175 insert at child thread.
from ThreadA get value=1514531585175 insert at child thread.
from ThreadA get value=1514531585175 insert at child thread.
from ThreadA get value=1514531585175 insert at child thread.