java线程之InheritableThreadLocal

来源:互联网 发布:淘宝助理有没有mac版 编辑:程序博客网 时间:2024/06/06 05:15

hreadLocal和InheritableThreadLocal区别,可以用代码测试一下:

在CODE上查看代码片派生到我的代码片

    package com.lang;      import junit.framework.TestCase;      import static java.lang.System.out;      public class TestInheritableThreadLocal extends TestCase {          public void testThreadLocal() {              final ThreadLocal<String> local = new ThreadLocal<String>();              work(local);          }          public void testInheritableThreadLocal() {              final ThreadLocal<String> local = new InheritableThreadLocal<String>();              work(local);          }          private void work(final ThreadLocal<String> local) {              local.set("a");              out.println(Thread.currentThread() + "," + local.get());              Thread t = new Thread(new Runnable() {                  @Override                  public void run() {                      out.println(Thread.currentThread() + "," + local.get());                      local.set("b");                      out.println(Thread.currentThread() + "," + local.get());                  }              });              t.start();              try {                  t.join();              } catch (InterruptedException e) {                  e.printStackTrace();              }              out.println(Thread.currentThread() + "," + local.get());          }      }  

运行testThreadLocal,输出:

    Thread[main,5,main],a      Thread[Thread-0,5,main],null      Thread[Thread-0,5,main],b      Thread[main,5,main],a  

运行testInheritableThreadLocal,输出:

    Thread[main,5,main],a      Thread[Thread-0,5,main],a      Thread[Thread-0,5,main],b      Thread[main,5,main],a  

比较后,看到ThreadLocal里的值,子线程里不能获得;InheritableThreadLocal里的值,子线程可以获得。

0 0