什么是ThreadLocal?

ThreadLocal 是 Java 中用于实现线程本地存储(Thread-Local Storage)的核心类,它允许每个线程拥有自己独立的变量副本,从而在多线程环境中实现线程隔离,避免共享变量带来的线程安全问题。
- 线程隔离
每个线程通过ThreadLocal访问变量时,实际上操作的是线程自身内存中的独立副本,其他线程无法访问。 - 内部存储
ThreadLocal的值存储在 线程对象(Thread)内部的 ****ThreadLocalMap中,其本质是一个键值对结构:
-
- Key:
ThreadLocal实例(弱引用)。 - Value:线程本地变量的值。
- Key:
如何使用TheadLocal?
非常的简单,只要记得get、set、remove就行了。
通常声明为静态变量,以便所有实例共享同一个变量,但每个线程有独立副本。
private static ThreadLocal<Integer> threadId = new ThreadLocal<>();
set就是给当前线程赋值,get就是获取当前线程set的值,这个没话说
threadId.set(100); // 设置当前线程的值为100
int id = threadId.get(); // 获取当前线程的值
用完后,一定要记得用remove,不然会有内存泄漏的风险,至于为什么呢?原理篇会说。
try {
threadId.set(100);
// 执行业务逻辑
} finally {
threadId.remove();
}
最佳实践
上下文传递
在Web应用中传递用户会话(Session)或请求ID,避免显式传参。
public class UserContext {
private static final ThreadLocal<User> cur

4110

被折叠的 条评论
为什么被折叠?



