首先要晓得什么是 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
办法初始化内容。