• 近期将进行后台系统升级,如有访问不畅,请稍后再试!
  • 极客文库-知识库上线!
  • 极客文库小编@勤劳的小蚂蚁,为您推荐每日资讯,欢迎关注!
  • 每日更新优质编程文章!
  • 更多功能模块开发中。。。

多线程并发神器–ThreadLocal


什么是 ThreadLocal

可以理解成线程本地变量,传统的线程对一个变量操作时操作的是同一个对象,也存在线程安全的问题。

ThreadLocal 是一个变量的本地副本,线程对变量的操作不会影响其他线程。

首先看看 ThreadLocal 的类结构


其中可重写的方法有以下几个


initialValue():ThreadLocal 初始化的值,新建 ThreadLocal 的一般要重写给个初始的值。

get():获取当前线程变量的副本值。

set(T value):设置、更新当前线程上的变量副本值。

remove():移除当前线程上的变量副本。

ThreadLocal 使用

新建 ThreadLocal,类型为 User,并初始化为 tom,12 岁,启动 3 个线程,每个线程循环 3 次,休眠 1 少,主线程再输出。


输出结果如下


从结果可见每个线程使用的是各自线程的变量副本,并没有影响其他线程和主线程,实现了线程隔离的效果。

使用场景

一般用来解决数据库连接、用户 session 管理等。

内存泄露问题

如果线程的执行周期过长可能导致内存泄露的风险,虽然线程执行完后会 ThreadLocal 也会随着销毁,但最好使用完后加上 remove 这样会加快内存的释放,一般来说线程周期不长是不太会引起内存泄露的。还有如果定义了 ThreadLocal 又不用也有问题,因为每次 ThreadLocal 的 get/set/remove 操作都会清理无效的 key 加快内存释放。ThreadLocal 应用比较广泛,如果不是滥用,利是大于憋的。


丨极客文库, 版权所有丨如未注明 , 均为原创丨
本网站采用知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议进行授权
转载请注明原文链接:多线程并发神器–ThreadLocal
喜欢 (0)
[247507792@qq.com]
分享 (0)
勤劳的小蚂蚁
关于作者:
温馨提示:本文来源于网络,转载文章皆标明了出处,如果您发现侵权文章,请及时向站长反馈删除。

欢迎 注册账号 登录 发表评论!

  • 精品技术教程
  • 编程资源分享
  • 问答交流社区
  • 极客文库知识库

客服QQ


QQ:2248886839


工作时间:09:00-23:00