首页 > 编程语言 >Java笔记之ThreadLocal

Java笔记之ThreadLocal

时间:2024-07-14 17:27:08浏览次数:16  
标签:副本 Java 变量 ThreadLocalMap 笔记 ThreadLocal 线程 key

定义:ThreadLocal叫做线程变量,该变量对其他线程而言是隔离的,是当前线程独有的变量。ThreadLocal为变量在每一个线程中都创建了一个副本,并且该副本只能当前Thread使用,因此不存在多线程共享的问题。

原理:Thread类有一个类型ThreadLocalMap的实例变量ThreadLocals,每个线程都有一个属于自己的ThreadLocalMap;ThreadLocalMap内部维护着Entry数组代表一个完整对象。key是ThreadLocal对象,value是线程变量的副本。每个线程在往ThreadLocal设置值的时候,都往ThreadLocalMap里存储;读取时以某个ThreadLocal作为引用,在map中找到对应的key,从而实现线程隔离。ThreadLocal本身不存储值,它只是作为一个key来让线程往ThreadLocalMap里存取值。

ThreadLocal和synchronized区别:synchronized用于线程间的数据共享,ThreadLocal用于线程间的数据隔离。synchronized是利用锁机制实现,使变量或者代码块只能被一个线程访问;ThreadLocal为每个线程提供一个变量副本,使得每个线程在某一时间访问到的并不是同一个对象。

ThreadLocal内存泄露问题:由于ThreadLocalMap中使用的key是ThreadLocal的弱引用,弱引用是只要垃圾回收机制一运行,不管内存是否充足,都会被垃圾回收器回收。但是ThreadLocalMap生命周期和Thread一样,因此会造成ThreadLocalMap的key没有了,但是value还存在,就会造成内存泄露问题。解决方案:使用完ThreadLocal后,及时调用remove方法释放内存空间。

 

标签:副本,Java,变量,ThreadLocalMap,笔记,ThreadLocal,线程,key
From: https://blog.csdn.net/m0_73363779/article/details/140357966

相关文章

  • java总结第二周
    本周对JAVA的while,switch,for以及数组进行了学习。数组是一种数据结构,它可以存储一系列相同类型的变量。在Java中,定义一个数组需要指定其数据类型和大小。数组的索引从0开始,最后一个元素的索引是数组长度减1。可以通过索引来访问和修改数组中的元素。数组的主要优点是可以方便地......
  • 《项目管理》-笔记2
    1.项目集定义项目集是一组相互关联且被协调管理的项目、子项目集和项目集活动,以便获得分别管理所无法获得的利益。项目集有三个核心特征:(1)多个项目(2)统一战略目标(3)统一配置资源项目组合管理利用了MPT的概念,并且也应用了三个关键评估标准来衡量项目:项目承担的成本、存在的风险......
  • Java计算机毕业设计个性化旅游景点推荐网站(开题报告+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在旅游业蓬勃发展的今天,随着人们生活水平的提高和休闲时间的增加,个性化旅游需求日益凸显。传统旅游推荐方式往往基于热门景点或固定线路,难以满足游客......
  • Factory method 'redissonClient' threw exception; nested exception is java.lang.I
    你遇到的这个错误是在Spring框架中常见的,它表示在创建Bean的过程中,有一个依赖关系未能得到满足。在这个特定的情况下,错误发生在创建voucherOrderController和voucherOrderServiceImpl这两个Bean时,其根本原因是无法实例化redissonClient,而redissonClient的创建失败是因为提供的Redi......
  • Java计算机毕业设计多媒体素材管理库(开题报告+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展,多媒体素材在教育教学、广告宣传、影视制作等多个领域的应用日益广泛。然而,多媒体素材的种类繁多、数量庞大,如何高效地存储、......
  • Java练习
    【例3.1】创建主类并调用其主方法在Eclipse下依次创建项目item、包Number和类First。在类体中输入以下代码,实现在控制台上输出"你好Java" 【例3.2】根据身高体重计算BMI指数创建BMlexponent类;声明double型变量height以记录身高,单位为米;声明int型变量weigbl以记录体重......
  • 003java jsp SSM在线医院医疗服务系统医院预约挂号医生坐诊健康资讯(源码+文档+开题+运
     项目技术:SSM+Maven+Vue等等组成,B/S模式+Maven管理等等。环境需要1.运行环境:最好是javajdk1.8,我们在这个平台上运行的。其他版本理论上也可以。2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;3.tomcat环境:Tomcat7.x,8.x,9.x版本均可4.硬件环境:windows7/8/1......
  • 1117java jsp SSM Springboot在线答疑系统学生考试问题发布教师疑难解答(源码+文档+PPT
     项目技术:Springboot+Maven+Vue等等组成,B/S模式+Maven管理等等。环境需要1.运行环境:最好是javajdk1.8,我们在这个平台上运行的。其他版本理论上也可以。2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;3.tomcat环境:Tomcat7.x,8.x,9.x版本均可4.硬件环境:window......
  • 014java jsp SSM乡镇自来水收费系统水价水表管理(源码+文档+PPT+开题+任务书+运行视频+
     项目技术:SSM+Maven+Vue等等组成,B/S模式+Maven管理等等。环境需要1.运行环境:最好是javajdk1.8,我们在这个平台上运行的。其他版本理论上也可以。2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;3.tomcat环境:Tomcat7.x,8.x,9.x版本均可4.硬件环境:windows7/8/1......
  • JDK8 Lambda java.io.File listFiles
    File[]files=dir.listFiles((dir1,name)->name.toLowerCase().endsWith(".jpg")||name.toLowerCase().endsWith(".png"));File[]files=dir.listFiles(newFilenameFilter(){publicbooleanaccept(Filedir,Stringname) { ......