[TOC]
ThreadLocal 主要用于线程内共享一些数据,而不是线程间共享数据。
ThreadLocal
主要用于同一线程内共享一些数据,避免通过参数来传递。
需要注意的是: ThreadLocal并不存储Thread的引用。
ThreadLocal 和 Thread 是 深度绑定的。
- ThreadLocal 声明 静态内部类 ThreadLocal.ThreadLocalMap
- Thread 拥有 ThreadLocal.ThreadLocalMap 成员变量
- 一个 Thread 对象拥有一个 ThreadLocal.ThreadLocalMap 成员变量
- 从名称中就可以看出 ThreadLocal.ThreadLocalMap 是 map 类型的: key 代表不同的 ThreadLocal 变量,value 代表 用户数据。
最常见的ThreadLocal使用场景为 用来解决 数据库连接、Session管理等。
源码 主要方法
1 | public class ThreadLocal<T> { |
get: 获取当前线程的副本
set:设置当前线程副本
remove: 移除当前线程中变量的副本
initialValue: 当 get() 获取不到ThreadLocalMap时,返回该值
ThreadLocalMap
ThreadLocal 中包含着一个静态内部类 ThreadLocalMap . ThreadLocalMap 是一个 自定义的hashMap,用来存储
1 | key: ThreadLocal<T> 实例对象 |
为什么是map呢: 因为一个线程类中,可能会申明多个 ThreadLocal 变量。
部分源码
1 | public class ThreadLocal<T> { |