ThreadLocal

什么是ThreadLocal?

ThreadLocal 是 Java 中用于实现线程本地存储(Thread-Local Storage)的核心类,它允许每个线程拥有自己独立的变量副本,从而在多线程环境中实现线程隔离,避免共享变量带来的线程安全问题。

  1. 线程隔离
    每个线程通过 ThreadLocal 访问变量时,实际上操作的是线程自身内存中的独立副本,其他线程无法访问。
  2. 内部存储
    ThreadLocal 的值存储在 线程对象(Thread)内部的 ****ThreadLocalMap 中,其本质是一个键值对结构:
    • KeyThreadLocal 实例(弱引用)。
    • Value:线程本地变量的值。

如何使用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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值