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就能拿到了。線程