java面试-0315-父子线程怎么共享数据?原理?
用InheritableThreadLocal。子线程创建时,复制父线程的 inheritableThreadLocals(ThreadLocalMap)到子线程
Thread初始化时检查父线程的inheritableThreadLocals,若不为空,调用createInheritedMap复制到子线程的 inheritableThreadLocals
public class InheritableThreadLocalTest {
public static void main(String[] args) {
final ThreadLocal threadLocal = new InheritableThreadLocal();
threadLocal.set(“b”);// 主线程
Thread t = new Thread() {//子线程
@Override
public void run() {
super.run();
System.out.println(“a” + threadLocal.get());
}
};
t.start();
}
}
public class Thread {
ThreadLocal.ThreadLocalMap inheritableThreadLocals = null;
private Thread(…){
…
Thread parent = currentThread();
if (inheritThreadLocals && parent.inheritableThreadLocals != null)
this.inheritableThreadLocals =
ThreadLocal.createInheritedMap(parent.inheritableThreadLocals);
…
}
}
