首先要晓得什么是ThreadLocal.
在多线程的环境中,每次进行线程切换都须要进行上下文切换,须要横跨若干办法调用十分的麻烦。
Java规范库提供了一个非凡的ThreadLocal,它能够在一个线程中传递同一个对象。以把ThreadLocal看成一个全局Map<Thread, Object>:每个线程获取ThreadLocal变量时,总是应用Thread本身作为key:

Object threadLocalValue = threadLocalMap.get(Thread.currentThread());

因而,ThreadLocal相当于给每个线程都开拓了一个独立的存储空间,各个线程的ThreadLocal关联的实例互不烦扰。

通过HashCode标识每个线程。能够打消在雷同线程应用间断结构的 ThreadLocals 的常见状况下的抵触。

private final int threadLocalHashCode = nextHashCode();

以下是ThreadLocal的API:

  • set()办法,设置以后线程中变量的正本。
  • get()办法,获取 ThreadLocal在以后线程中保留的变量正本。
  • remove()办法,清空以后线程中变量的正本。
  • initialValue()是一个 protected办法,个别是用来重写的,如果在没有set的时候就调用 get,会调用 initialValue办法初始化内容。