当前位置:网站首页>《多线程下ThreadLocal使用场景实例》
《多线程下ThreadLocal使用场景实例》
2022-07-26 11:47:00 【用户9919783】
在业务开发中,threadLocal有两种业务场景运用较多。
1、threadlocal保证每个线程独享对象,创建本地线程的副本,保证每个线程都拥有属于自己的副本,这样保证线程安全。
2、threadlocal可以作用类似全局变量,在其中一个方法里用set存入数据,其他方法可以用get直接获取,避免了传参,作用到每个线程独立保存信息。
场景一:
结果:开启了三个线程,因为用了threadlocal,每个线程都有属于自己的本地副本,并不会累加到15,而是n最大输出5。
还有就是simpledateformat也适用于场景一,当线程池开启,提交10000个或者更多任务时,每个线程都创建属于自己的simpledateformat开销会很大,而且占用内存,销毁对象也是有开销的:这种情况下,我们首先想到的是所有线程先共用一个simpledataformate,但他不是线程安全的,如何解决呢,给他加synchrolized锁,这样可以解决,但线程运行的时候,会发生阻塞,非常影响效率,此时此刻threadlocal就是非常好的解决办法。
threadlocal会让每个线程的simpledateformat独立,如果线程池Executors.newFixedThreadPool(15)开启15个线程,则只会创建15个simpledateformat,而且线程安全,相互之前不会影响。
场景二:
场景二类似于全局变量,免去了传参的麻烦 ,保证方法得到的对象值相同,先将对象存储在localthread里面,然后在获取,最后一定要记得remove掉。
问:线程池中使用threadlocal为什么容易造成内存泄漏?
因为线程池里的线程存活周期太长,往往跟程序的停止才销毁的,这样threadlocal持有的threadlocalmap就一直不会被回收,解决办法,可以手动在finally块调用它的remove()方法。
边栏推荐
- PyCharm是真的强
- 大咖观点+500强案例,软件团队应该这样提升研发效能!
- 元宇宙日报|元宇宙社交 App“派对岛”产品下架;广州南沙元宇宙产业集聚区揭牌;数字经济发展部际联席会议制度推出
- 4.1 configure MySQL and register login module
- pytest接口自动化测试框架 | pytest获取执行数据、pytest禁用插件
- 请问下有人知道FlinkSQL 的 Retrack 在哪里可以指定吗? 网上资料只看到API 代码设
- [download attached] a powerful web automated vulnerability scanning tool - Xray
- Recalling Sister Feng
- Mlx90640 infrared thermal imager temperature sensor module development notes (6)
- Pytoch -- error based on mmseg/mmdet training: runtimeerror: expected to have finished reduction in the priority iteration
猜你喜欢

了解 useRef 一篇就够了

Audio and video+

专访即构科技李凯:音视频的有趣、行业前沿一直吸引着我

3.2 创建菜单与游戏页面(下)

System call capture and segmentation - RING3 layer LD_ Preload mechanism for library function hijacking

系统调用捕获和分—Ring3层LD_PRELOAD机制进行库函数劫持

Miccai2022 paper | evolutionary multi-objective architecture search framework: application in covid-19 3D CT classification

pytest接口自动化测试框架 | pytest常用插件

LeetCode / Scala - 两数,三数,四数,N数之和

3.2 create menu and game pages (Part 2)
随机推荐
Koin
建模杂谈系列150 SCLC工程化实验3-SRule
Pytest interface automation test framework | rerun failed cases
元宇宙日报|元宇宙社交 App“派对岛”产品下架;广州南沙元宇宙产业集聚区揭牌;数字经济发展部际联席会议制度推出
pytest接口自动化测试框架 | pytest配置文件
系统调用捕获和分析完结篇制作系统调用日志收集系统
线上一个隐匿 Bug 的复盘
种种迹象表明,Apple将有望支持AV1
请问下有人知道FlinkSQL 的 Retrack 在哪里可以指定吗? 网上资料只看到API 代码设
System call capture and analysis - ring layer kprobe hijacks system calls
pytest接口自动化测试框架 | pytest之fixture介绍
V00 - 年纪大了,想做啥就做啥吧
【活动早知道】LiveVideoStack近期活动一览
Question and answer No. 48: geek appointment - construction path of observable system
pytest接口自动化测试框架 | 重新运行失败用例
JS use webuploader to do blocking and breakpoint continuation of large files
4.1 配置Mysql与注册登录模块
Application scheme of ankerui residual pressure monitoring system in residential quarter
【通信原理】第一章 -- 绪论
pytest接口自动化测试框架 | pytest常用插件