JUC——ThreadLocal是怎么解决并发安全的?

谈谈ThreadLocal是怎么解决并发安全的?

ThreadLocal是Java提供的一种保存线程私有信息的机制,因为其在整个线程生命周期内有效,所以可以方便的在一个线程关联的不同业务模块之间传递信息,比如事务ID、Cookie等上下文相关信息。

ThreadLocal为每一个线程维护变量的副本,把共享数据的可见范围限制在同一个线程之内,实现原理是:在ThreadLocal类中有一个Map,用于存储每一个线程的变量的副本。

使用案例:

JUC——ThreadLocal 实现全局获取用户信息_threadloacl获取账号数据-CSDN博客

为什么会说慎用ThreadLocal,谈谈理解和使用注意事项?

使用ThreadLocal要注意remove

ThreadLocal的实现是基于ThreadLocalMap,在ThreadLocalMap中,它的key是一个弱引用。

通常弱引用都会和引用队列配合清理机制使用,但是ThreadLocal是个例外,没有这么做。这意味着,废弃项目的回收依赖于显式的触发,否则就要等待线程结束,进而回收相应的ThreadLocalMap,这就是狠多OOM的来源,所以通常都会建议,应用一定要自己负责remove。并且不要和线程池配合,因为worker线程往往是不会退出的

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值