ThreadLocal 是 Java 提供的一个用于创建线程局部变量的类。这些变量不同于它们的正常变量,因为每一个线程都会拥有这个变量的一个独立副本,因此每个线程都可以独立地更改自己的副本,而不会影响其他线程所拥有的副本。
定义
ThreadLocal 是一个泛型类,用于创建线程局部变量。这些变量与正常的可共享变量不同,因为每个访问该变量的线程都有自己独立初始化的变量副本。ThreadLocal 实例通常作为静态字段存在于类中,以允许它们被类的所有实例共享。
作用
ThreadLocal 主要用于在多线程环境中存储线程特有的数据,这样每个线程都可以独立地更改自己的数据副本,而不会影响到其他线程。这在很多情况下非常有用,例如,当你想在多个线程之间保持某种状态时。
使用语法
创建 ThreadLocal 实例
ThreadLocal<String> threadLocal = new ThreadLocal<>();
设置值
 对于当前线程,你可以使用 set 方法来设置值。
threadLocal.set("Thread-specific value");
获取值
 你可以使用 get 方法来获取当前线程的值。
String value = threadLocal.get();
移除值
 使用完线程局部变量后,最好使用 remove 方法来移除它,以释放资源。
threadLocal.remove();
使用语法实例
下面是一个简单的例子,展示了如何在多线程环境中使用 ThreadLocal:
import java.util.concurrent.ExecutorService;  
import java.util.concurrent.Executors;  public class ThreadLocalExample {  // 创建一个 ThreadLocal 实例  private static final ThreadLocal<String> threadLocal = new ThreadLocal<>();  public static void main(String[] args) {  ExecutorService executorService = Executors.newFixedThreadPool(5);  for (int i = 0; i < 5; i++) {  final int threadNumber = i;  executorService.submit(() -> {  // 为当前线程设置值  threadLocal.set("Thread " + threadNumber + " specific value");  try {  // 模拟一些工作  Thread.sleep(1000);  } catch (InterruptedException e) {  e.printStackTrace();  }  // 获取并打印当前线程的值  System.out.println(threadLocal.get());  // 移除值  threadLocal.remove();  });  }  executorService.shutdown();  }  
}