废话少说,上代码
package extthread; import tools.Tools; public class ThreadA extends Thread { @Override public void run() { try { for (int i = 0; i < 10; i++) { System.out.println("在ThreadA线程中取值=" + Tools.tl.get()); Thread.sleep(100); } } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
package ext; import java.util.Date; public class InheritableThreadLocalExt extends InheritableThreadLocal { @Override protected Object initialValue() { return new Date().getTime(); } }
package test; import tools.Tools; import extthread.ThreadA; public class Run { public static void main(String[] args) { try { for (int i = 0; i < 10; i++) { System.out.println(" 在Main线程中取值=" + Tools.tl.get()); Thread.sleep(100); } Thread.sleep(5000); ThreadA a = new ThreadA(); a.start(); } catch (InterruptedException e) { e.printStackTrace(); } } }
package tools; import ext.InheritableThreadLocalExt; public class Tools { public static InheritableThreadLocalExt tl = new InheritableThreadLocalExt(); }
子线程可以从父线程中去值。值继承也可以在修改。见如下代码
package ext; import java.util.Date; public class InheritableThreadLocalExt extends InheritableThreadLocal { @Override protected Object initialValue() { return new Date().getTime(); } @Override protected Object childValue(Object parentValue) { return parentValue + " 我在子线程加的~!"; } }
运行结果:
在Main线程中取值=1467603826045
在Main线程中取值=1467603826045
在Main线程中取值=1467603826045
在Main线程中取值=1467603826045
在Main线程中取值=1467603826045
在Main线程中取值=1467603826045
在Main线程中取值=1467603826045
在Main线程中取值=1467603826045
在Main线程中取值=1467603826045
在Main线程中取值=1467603826045
在ThreadA线程中取值=1467603826045 我在子线程加的~!
在ThreadA线程中取值=1467603826045 我在子线程加的~!
在ThreadA线程中取值=1467603826045 我在子线程加的~!
在ThreadA线程中取值=1467603826045 我在子线程加的~!
在ThreadA线程中取值=1467603826045 我在子线程加的~!
在ThreadA线程中取值=1467603826045 我在子线程加的~!
在ThreadA线程中取值=1467603826045 我在子线程加的~!
在ThreadA线程中取值=1467603826045 我在子线程加的~!
在ThreadA线程中取值=1467603826045 我在子线程加的~!
在ThreadA线程中取值=1467603826045 我在子线程加的~!