Java多线程:带你了解神秘的线程变量 ThreadLocal

前言

  • 在 Java 多线程中,线程变量 ThreadLocal 非常重要,但对于很多开发者来说,这并不容易理解,甚至觉得有点神秘
  • 今天,我将献上一份 ThreadLocal 的介绍 & 实战攻略 ,希望你们会喜欢。

目录

Java多线程:带你了解神秘的线程变量 ThreadLocal_第1张图片

 

示意图

1. 简介

Java多线程:带你了解神秘的线程变量 ThreadLocal_第2张图片

 

示意图

2. 使用流程

主要是创建 ThreadLocal 变量 & 访问 ThreadLocal 变量

2.1 创建ThreadLocal变量

共有3种方式,具体如下

// 1. 直接创建对象
private ThreadLocal myThreadLocal = new ThreadLocal()
// 2. 创建泛型对象
private ThreadLocal myThreadLocal = new ThreadLocal();
// 3. 创建泛型对象 & 初始化值
// 指定泛型的好处:不需要每次对使用get()方法返回的值作强制类型转换
private ThreadLocal myThreadLocal = new ThreadLocal() {
 @Override
 protected String initialValue() {
 return "This is the initial value";
 }
};
// 特别注意:
// 1. ThreadLocal实例 = 类中的private、static字段
// 2. 只需实例化对象一次 & 不需知道它是被哪个线程实例化
// 3. 每个线程都保持 对其线程局部变量副本 的隐式引用
// 4. 线程消失后,其线程局部实例的所有副本都会被垃圾回收(除非存在对这些副本的其他引用)
// 5. 虽然所有的线程都能访问到这个ThreadLocal实例,但是每个线程只能访问到自己通过调用ThreadLocal的set()设置的值
 // 即 哪怕2个不同的线程在同一个`ThreadLocal`对象上设置了不同的值,他们仍然无法访问到对方的值

你可能感兴趣的:(Java编程,Java,Java程序员,java,jvm,开发语言)