前言
- 在 Java 多线程中,线程变量 ThreadLocal 非常重要,但对于很多开发者来说,这并不容易理解,甚至觉得有点神秘
- 今天,我将献上一份 ThreadLocal 的介绍 & 实战攻略 ,希望你们会喜欢。
目录
示意图
1. 简介
示意图
2. 使用流程
主要是创建 ThreadLocal 变量 & 访问 ThreadLocal 变量
2.1 创建ThreadLocal变量
共有3种方式,具体如下
// 1. 直接创建对象 private ThreadLocal myThreadLocal = new ThreadLocal() // 2. 创建泛型对象 private ThreadLocal myThreadLocal = new ThreadLocal<String>(); // 3. 创建泛型对象 & 初始化值 // 指定泛型的好处:不需要每次对使用get()方法返回的值作强制类型转换 private ThreadLocal myThreadLocal = new ThreadLocal<String>() { @Override protected String initialValue() { return "This is the initial value"; } }; // 特别注意: // 1. ThreadLocal实例 = 类中的private、static字段 // 2. 只需实例化对象一次 & 不需知道它是被哪个线程实例化 // 3. 每个线程都保持 对其线程局部变量副本 的隐式引用 // 4. 线程消失后,其线程局部实例的所有副本都会被垃圾回收(除非存在对这些副本的其他引用) // 5. 虽然所有的线程都能访问到这个ThreadLocal实例,但是每个线程只能访问到自己通过调用ThreadLocal的set()设置的值 // 即 哪怕2个不同的线程在同一个`ThreadLocal`对象上设置了不同的值,他们仍