首页 > 其他分享 >深入学习ThreadLocal

深入学习ThreadLocal

时间:2023-06-04 12:44:46浏览次数:27  
标签:threadlocal 学习 ThreadLocal 线程 深入 key Entry 引用

1、用来干吗的?

用于线程在任意的地方去共享数据,而不被其他线程所干扰,

2、原理是什么

因为每个线程维护一份ThreadLocalMap,使用threadlocal.set(obj)方法是存放在map里面的Entry<<WeekReference>ThreadLocal,Value>数组里

3、实际案例,比如写了util类,但是SimplateDateFormate是线程不安全的,定义成成员变量多线程调用就会有问题,使用threadlocal相当于每个线程都有一份这个value,也就是simplateDateFormate对象

  

 

 4、为什么不使用thread的id作为Entry的key

当有两个ThreaLocal1和ThreadLocal2时候,在local1设置的值会被loca2中读到,但使用Threadlocal作为key就能区分

5、key为什么会设置弱引用,为什么会内存泄漏

当手动回收了ThreadLocal对象,如果是强引用,那么Entry还有一个对ThreadLocal的强引用,如果不手动删除,会导致这个Entry一直存在

从而导致内存泄漏,当使用弱引用,回收了ThreadLocal对象后,Entry里面是个弱引用,ThreadLocal就会被回收,Entry面的key变成null

在下一次get set remove就会清除掉这些key为null的数据 ,相当于提供了一层保障。

6、使用注意点

使用static修饰threadlocal修饰,当get完调用一次remove清除当此的Entry.

标签:threadlocal,学习,ThreadLocal,线程,深入,key,Entry,引用
From: https://www.cnblogs.com/wenwenzuiniucha/p/17455524.html

相关文章

  • python基础学习-读写CSV文件
    CSV文件介绍参考:Python-Core-50-Courses/第23课:用Python读写CSV文件.mdatmaster·jackfrued/Python-Core-50-Courses(github.com)CSV 全称逗号分隔值文件是一种简单、通用的文件格式,被广泛的应用于应用程序(数据库、电子表格等)数据的导入和导出以及异构系统之间的数据......
  • python基础学习-发送邮件
    importsmtplibfromemail.headerimportHeaderfromemail.mime.multipartimportMIMEMultipartfromemail.mime.textimportMIMEText"""发送普通邮件"""#创建邮件主体对象email=MIMEMultipart()#设置发件人、收件人和主题email['From']=&#......
  • python基础学习-XPath解析html
    参考地址:Python-Core-50-Courses/第33课:用Python解析HTML页面.mdatmaster·jackfrued/Python-Core-50-Courses(github.com) XPath是在XML(eXtensibleMarkupLanguage)文档中查找信息的一种语法,XML跟HTML类似也是一种用标签承载数据的标签语言,不同之处在于XML的标签......
  • python基础学习-字典
    """字典dict定义:元素是键值对,key不能重复,不能使用下标索引,key是除字典外其他类型,value为任意类型,可嵌套,可修改,支持for循环,不支持while循环#字面量{key:value,key:value,key:value}#定义变量变量名称={key:value,key:value,key:value}#定义空列表变量名称=dict()......
  • python基础学习-异常
    """异常:捕获异常:基本语法:try:可能发生错误的代码except:出现异常执行代码else:没异常,执行finally:无论有无异常,都执行异常具有传递性"""#捕获指定异常try:print(name)exceptNameErrorase:print("出现未定义异常")print(e)#捕获多个异常try:p......
  • gitignore规则再学习
    gitignore规则之前就学习过,不过到现在还是一知半解,昨天又重新学习了一下,并做了一些实验,似乎又明白了,所以记录下来,以备后续查阅.首先,.gitignore文件所在的目录作为匹配的根目录对于每一个目录或者文件全路径,进行匹配规则验证如下所示的目录结构:要匹配的文件......
  • python基础学习-容器
    """容器的通用功能:len(容器)统计容器元素个数max(容器)统计最大元素min(容器)统计最小元素类型转换list(容器)给定容器转换为liststr(容器)给定容器转换为strtuple(容器)给定容器转换为tupleset(容器)给定容器转换set通用排序:sorted(容器,[reverse=True])默......
  • babylon.js 学习笔记(8)
    接上回继续,现在的村庄已经有点象样了,但是远处的背景仍比较单调(如下图),今天来学习如何处理天空背景。babylon.js中,把整个空间假象成一个巨大的立方体(称为SkyBox),然后依次给立方体的6个面,贴上天空的背景图(如下图)在代码中只要指定这6张图的rootUrl即可,babylon.js会自动拼上一......
  • 安全测试--fiddler工具学习和使用
    平常功能测试或者在进行安全相关测试时,会抓一些接口数据,来进行辅助测试。使用较多的抓包工具是fiddle,所以这里介绍了一下fiddler原理,并介绍一些工作上经常使用的fiddler功能(工具栏、抓https的设置、过滤器、重放、段点、会话保存等功能,手机抓包的功能在另外一篇随笔里)。......
  • 06web安全学习---信息搜集(The Soul of penetration test)
    声明学习网络安全,必须要坚守一个原则,那就是一定一定一定要遵守《中华人民共和国网络安全法》,做一个遵纪守法的好公民,不要利用技术做一些违法犯罪的事情,否则后果自负,请切记!!!一、为什么要信息收集(踩点)目的就是找到薄弱点进行attack;二、信息收集方向三、巧用网络空间搜索引擎 四、信息......