Java多线程中的ThreadLocal,可继承,可修改。
package test;
import java.util.Date;
public class InheritableThreadLocalExt extends InheritableThreadLocal<Object>{
@Override
protected Object initialValue() {
return new Date().getTime();
}
@Override
protected 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 {
@Override
public 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.