并发编程 - ThreadLocal
ThreadLocal 是 Java 提供的一个线程本地存储(Thread-Local Storage)机制,它允许每个线程拥有自己的变量副本,从而实现线程隔离,避免多线程环境下的竞争问题。
1. ThreadLocal 的作用
- 线程隔离:每个线程可以独立访问自己的变量副本,不会影响其他线程。
- 避免同步:由于变量是线程私有的,无需加锁(如 synchronized 或 ReentrantLock),提高并发性能。
- 传递上下文:常用于存储线程相关的上下文信息(如用户会话、事务 ID、数据库连接等)。
2. 基本使用
(1)创建 ThreadLocal
1 | ThreadLocal<String> threadLocal = new ThreadLocal<>(); |
(2)设置和获取值
1 | threadLocal.set("Hello"); // 当前线程存储数据 |
(3)移除数据
1 | threadLocal.remove(); // 清除当前线程的数据,防止内存泄漏 |
3. 典型应用场景
- 存储用户会话(Session)
- 数据库连接管理
- SimpleDateFormat 线程安全
4. ThreadLocal 实现原理
ThreadLocal 的核心在于 Thread 类内部维护了一个 ThreadLocalMap
,它是一个自定义的哈希表,用于存储线程本地变量:
- set() 方法:将数据存入当前线程的
ThreadLocalMap
。 - get() 方法:从当前线程的
ThreadLocalMap
获取数据。 - remove() 方法:清除当前线程的
ThreadLocalMap
中的数据。
If you like this blog or find it useful for you, you are welcome to comment on it. You are also welcome to share this blog, so that more people can participate in it. If the images used in the blog infringe your copyright, please contact the author to delete them. Thank you !