Threadlocal能够维持一个线程独立的变量,可是当咱们须要一个线程独立变量须要对子线程共享这个变量时Threadlocal就不能取到值了。InheritableThreadLocal就能处理这种状况ui
public class QuickTest { private ThreadLocal<String> localInfo = new ThreadLocal<String>(); private InheritableThreadLocal<String> inLocalInfo = new InheritableThreadLocal<String>(); @Test public void testInheriableThreadlocal() throws InterruptedException{ localInfo.set("thread main"); inLocalInfo.set("inthread main"); Thread myThread =new Thread(new Runnable() { public void run() { System.out.println(Thread.currentThread()+" localThead:"+localInfo.get()); System.out.println(Thread.currentThread()+" InlocalThead:"+inLocalInfo.get()); } }); myThread.start(); myThread.join(); System.out.println(Thread.currentThread()+" localThead:"+localInfo.get()); System.out.println(Thread.currentThread()+" InlocalThead:"+inLocalInfo.get()); } }
在代码中ThreadLocal在子线程不能拿到,InheritableThreadLocal就能拿到了。线程