ThreadLocal的介绍及其使用
private static final ThreadLocal<Integer> THREAD_LOCAL = new ThreadLocal<>();
@Test
void threadLocalTest() {
Assertions.assertDoesNotThrow(() -> {
// 线程1存储数据
Thread t1 = new Thread(() -> {
THREAD_LOCAL.set(10);
log.info("Thread 1 stored data: " + THREAD_LOCAL.get()); // 输出10
// 清除当前线程的数据
THREAD_LOCAL.remove();
});
// 线程2存储数据
Thread t2 = new Thread(() -> {
THREAD_LOCAL.set(20);
log.info("Thread 2 stored data: " + THREAD_LOCAL.get()); // 输出20
// 清除当前线程的数据
THREAD_LOCAL.remove();
});
t1.start();
t2.start();
try {
t1.join();
t2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
// 主线程获取数据
log.info("Main thread data: " + THREAD_LOCAL.get()); // 输出null
// 清除当前线程的数据
THREAD_LOCAL.remove();
});
}
ThreadLocal是Java中的一个线程级别的变量,它提供了一种线程内部的数据共享和访问机制。通过ThreadLocal,每个线程可以独立地存储和获取自己的数据,而不会影响其他线程。
ThreadLocal的用法如下:
- 创建ThreadLocal实例:通过
ThreadLocal<T>
来创建一个ThreadLocal对象,其中T
表示泛型类型,代表要存储的数据类型。 - 存储数据:使用
set(T value)
方法将数据存储到当前线程的ThreadLocal对象中。每个线程都有自己独立的数据副本,互不干扰。 - 获取数据:使用
get()
方法从当前线程的ThreadLocal对象中获取数据。 - 初始化数据:可以通过重写
initialValue()
方法来为ThreadLocal提供初始值。该方法会在第一次调用get()
或set()
时被调用。 - 删除数据:可以使用
remove()
方法来清除当前线程的ThreadLocal对象中的数据。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?