1. ThreadLocal 核心概念解析
ThreadLocal 是 Java 中一个看似简单却暗藏玄机的工具类。它本质上是一个线程级别的变量存储机制,允许每个线程拥有自己独立的变量副本。这种设计完美解决了多线程环境下变量共享导致的线程安全问题。
在实际开发中,我经常遇到这样的场景:某个变量需要在方法调用链中层层传递,但又不想在每个方法签名中都添加这个参数。这时 ThreadLocal 就成了救星。比如用户登录信息,从 Controller 层到 Service 层再到 DAO 层,如果每个方法都要声明 User 参数,代码会变得臃肿不堪。而使用 ThreadLocal,我们只需要在拦截器中设置一次,后续任何地方都可以直接获取。
重要提示:ThreadLocal 不是用来解决共享变量并发问题的,而是提供线程隔离的变量副本。这是很多初学者容易混淆的概念。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. ThreadLocal 使用详解
2.1 基础使用方法
让我们先看一个完整的 ThreadLocal 使用示例:
java复制public class UserContextHolder {
private static final ThreadLocal<User> currentUser = ThreadLocal.withInitial(() -> null);
public static void setCurrentUser(User user) {
currentUser.set(user);
}
public static User getCurrentUser() {
return currentUser.get();
}
public static void clear() {
currentUser.remove();
}
}
这段代码展示了 ThreadLocal 的标准用法模式:
- 声明为 static final 保证全局唯一
- 提供静态的 set/get 方法
- 必须提供清除方法
2.2 初始化方式对比
ThreadLocal 有三种初始化方式:
- 直接创建(需
