首页 > 编程语言 > 详细

java juc ->ThreadLocal

时间:2021-09-06 07:41:50      阅读:11      评论:0      收藏:0      [点我收藏+]

ThreadLocal的主要用途有二:

1:给每个线程copy份独自的成员变量

2: 复用数据抽取成成员变量 ,减少new 的操作

给每个线程copy份独自的成员变量的基本用法

技术分享图片

 

 

org.springframework.format.datetime.DateFormatter@73c30c5
org.springframework.format.datetime.DateFormatter@76724124
org.springframework.format.datetime.DateFormatter@b4f2bbf
org.springframework.format.datetime.DateFormatter@3da4d42f
org.springframework.format.datetime.DateFormatter@5c0e390d
org.springframework.format.datetime.DateFormatter@594dd94f
org.springframework.format.datetime.DateFormatter@28096f61
org.springframework.format.datetime.DateFormatter@77c69e3e
org.springframework.format.datetime.DateFormatter@344d0fd0
org.springframework.format.datetime.DateFormatter@49ae9bf

输出的结果如上 每个get()出来的每个对象都不一样

 

 

复用数据抽取成成员变量 ,减少new 的操作的基本用法

技术分享图片

 

 

技术分享图片

 

 输出如上;

ThreadLocal 的基本原理

一共就对外暴露三个方法

get(),set(),remove

以下是对应的源码

技术分享图片

 

 

技术分享图片

 

 

set()

技术分享图片

 

 这里没有显示 map构造的源码

有兴趣可以看 这篇 https://www.cnblogs.com/fsmly/p/11020641.html 写的蛮详细

 

remove()

技术分享图片

 

 

ThreadLocal 的溢出问题

因为ThreadLocal   使用当前线程的LocalsMap

然后 其中的entry是弱引用

可能会被GC回收(虽然GC的优先级很低) 而对应的value 确一直保存在内存中

所以有内存溢出的风险 

用完remove 是个好习惯。

 

java juc ->ThreadLocal

原文:https://www.cnblogs.com/ztqbky/p/15226183.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!