java juc ->ThreadLocal

ThreadLocal的主要用途有二:

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

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

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

java juc ->ThreadLocal

 

 

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 的操作的基本用法

java juc ->ThreadLocal

 

 

java juc ->ThreadLocal

 

 输出如上;

ThreadLocal 的基本原理

一共就对外暴露三个方法

get(),set(),remove

以下是对应的源码

java juc ->ThreadLocal

 

 

java juc ->ThreadLocal

 

 

set()

java juc ->ThreadLocal

 

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

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

 

remove()

java juc ->ThreadLocal

 

 

ThreadLocal 的溢出问题

因为ThreadLocal   使用当前线程的LocalsMap

然后 其中的entry是弱引用

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

所以有内存溢出的风险 

用完remove 是个好习惯。

 

java juc ->ThreadLocal

上一篇:JS 学习笔记--11---内置对象(Global/Math)


下一篇:QT多线程编程经验