ThreadLocal
定义
ThreadLocal是一个本地线程副本变量工具类。主要用于将私有线程和该线程存放的副本对象做一个映射,各个线程之间的变量互不干扰,在高并发场景下,可以实现无状态的调用,特别适用于各个线程依赖不同的变量值完成操作的场景
详细实现(源码)
可以理解为每个线程内部都有一个Map,存了线程某些实列的副本,在该线程内部可以无状态获得实列
由于每个线程只能拿到自己的变量副本,所以用ThreadLocal对Map做了封装,由ThreadLocal负责向map获取和设置线程的变量值,保证数据的隔离性
以上图片来自网络
ThreadLocalMap
ThreadLocalMap是ThreadLocal的内部类,没有实现Map接口,用独立的方式实现了Map的功能,其内部的Entry也独立实现
以上图片来自网络
ThreadLocalMap中,也是用Entry来保存K-V结构数据的。但是Entry中key只能是ThreadLocal对象,这点被Entry的构造方法已经限定死了
// 内部类ThreadLocalMap的基本结构
static class ThreadLocalMap {
static class Entry extends WeakReference<ThreadLocal<?>> {
/** The value associated with this ThreadLocal. */
Object value;
Entry(ThreadLocal<?> k