JUC之ThreadLocal

1 基础知识

1.1 强软弱虚四种引用

【整体结构】
在这里插入图片描述
【强引用】
在这里插入图片描述
【软引用】
在这里插入图片描述
【弱引用】
在这里插入图片描述
在这里插入图片描述
【虚引用】
在这里插入图片描述
在这里插入图片描述

2 ThreadLocal出现的好处

在这里插入图片描述

3 ThreadLocal源码分析

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.1 ThreadLocal内存泄露问题

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.2 ThreadLocal为什么使用的是弱引用

在这里插入图片描述
在这里插入图片描述

3.3 清扫过期的Entry

expungeStaleEntry

4 ThreadLocal使用建议

【初始化】

ThreadLocal<String> t1 = ThreadLocal.withInitial(() -> "hello");

【声明为static】
建议把ThreadLocal修饰为static

ThreadLocal实现线程隔离不在于它自己本身,而在于ThreadLocalMap,所以ThreadLocal可以只初始化一次,只分配一次存储空间就可以了。 无需作为成员变量多次被初始化。

使用完之后需要显示调用remove

猜你喜欢

转载自blog.csdn.net/kaikai_sk/article/details/131503129
今日推荐