什么是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应用比较广泛,如果不是滥用,利是大于憋的。

多线程并发神器--ThreadLocal相关推荐

  1. threadlocal使用_Java多线程数据共享神器ThreadLocal

    ThreadLocal内部结构和作用 从ThreadLocal源码中可以看到其提供了3个方法,分别是get/set/remove.维护了一个ThreadLocalMap的数据结构.在多线程环境下能正确 ...

  2. dateformat java 并发_java.text.DateFormat 多线程并发问题

    在日常开发中,java.text.DateFormat 应该算是使用频率比较高的一个工具类,经常会使用它 将 Date 对象转换成字符串日期,或者将字符串日期转化成 Date 对象.先来看一段眼熟的代 ...

  3. Java 多线程 并发编程

    转载自  Java 多线程 并发编程 一.多线程 1.操作系统有两个容易混淆的概念,进程和线程. 进程:一个计算机程序的运行实例,包含了需要执行的指令:有自己的独立地址空间,包含程序内容和数据:不同进 ...

  4. (四)Java中的多线程之间实现同步+多线程并发同步

    一.什么是线程安全问题 为什么有线程安全问题? 当多个线程同时共享同一个全局变量或静态变量,做写的操作(修改变量值)时,可能会发生数据冲突问题,也就是线程安全问题.但是做读操作时不会发生数据冲突问题. ...

  5. futuretask java 并发请求_Java面试题整理一(侧重多线程并发)

    1..是否可以在static环境中访问非static变量? 答:static变量在Java中是属于类的,它在所有的实例中的值是一样的.当类被Java虚拟机载入的时候,会对static变量进行初始化.如 ...

  6. Java 多线程 | 并发知识面试问答总结

    写在最前面 这个项目是从20年末就立好的 flag,经过几年的学习,回过头再去看很多知识点又有新的理解.所以趁着找实习的准备,结合以前的学习储备,创建一个主要针对应届生和初学者的 Java 开源知识项 ...

  7. 【成神之路】多线程并发相关面试题

    基本概念: 说说线程安全问题,什么是线程安全,如何保证线程安全 函数.函数库在并发环境中被调用时,能够正确地处理多个线程之间的共享变量,使程序功能正确完成. 代码在多线程下执行和在单线程下执行永远都能 ...

  8. 多线程并发知识,肝完这篇10W+字超详细的文章就够了

    大家好,我是Oldou,今天又到了我们的学习时间了,本文介绍的是多线程相关的知识,文中的内容可能不是很全,但是学习完一定会让自己掉发升级,内容比较多,但是我们千万别放弃,不懂的地方一定要主动花时间去理 ...

  9. Java 多线程 并发 锁 Java线程面试题

    1) 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速.比如,如果一个线程完成 ...

最新文章

  1. 互联网协议 — TLS 传输层安全协议
  2. 图解人工智能机器学习深度学习的关系和区别
  3. 【win32】vs2010的窗体程序Helloworld
  4. 数据库:MySQL高频面试题,大厂必备!
  5. 前端开发那些不常见但十分有效的小玩意
  6. git revert 之后怎么撤销_Git 如何优雅地回退代码
  7. [Swift]LeetCode609. 在系统中查找重复文件 | Find Duplicate File in System
  8. 毕业设计——宠物店管理系统
  9. 注意丨Pearson VUE身份证件政策要求
  10. 使用多线程爬取笔趣阁
  11. 如何在 Linux 和 Unix 上安装 git?
  12. 2021Android高级面试题总结:字节跳动Android岗经典面试真题,面经解析
  13. 似然函数和最大似然估计
  14. 诺基亚Lumia 900拥有惊人的快的方式连接
  15. Sonar编译问题对应:File [...] can't be indexed twice.
  16. 全球变暖的影响与原因
  17. python怎么计算_python怎么计算
  18. 显示器OLED面板“三国争雄”,三星、LG和京东方谁更牛?
  19. js获取美国太平洋标准时间PST
  20. 基于WINDOS系统自带工具IIS配置文件下载服务器

热门文章

  1. 浏览器打开出现证书错误_PADI 电子潜水证书更新啦!
  2. javascript 一些小常用的技巧
  3. CSS 技巧tips1
  4. mysql并发写入性能分析
  5. mysql OA_mysql优化工具—mysqloa
  6. usb扩展坞同时接键盘鼠标_轻薄本的办公伴侣,ORICO十一合一扩展坞体验
  7. whea uncorrectable error蓝屏_Windows 10再出“不可选”更新:蓝屏、死机比较烦
  8. 联想台式机网卡驱动_【装机帮扶站】第339期:联想刃7000:是否还有选购价值?4000价位装机推荐...
  9. 逻辑漏洞——验证机制问题
  10. 小白进阶之GIT篇(1)——创建了分支进行了代码修改但是切换回master分支运行发现代码在master分支也会生效