面试宝典之ThreadLocal原理

ThreadLocal原理

	ThreadLocal:
		为共享变量在每个线程中创建一个副本,
		每个线程都可以访问自己内部的副本变量。
		通过 threadlocal 保证线程的安全性。

	其实在 ThreadLocal 类中有一个静态内部类 ThreadLocalMap(其类似于 Map),
		用键值对的形式存储每一个线程的变量副本,
		ThreadLocalMap 中元素的 key 为当前ThreadLocal 对象,
		而 value 对应线程的变量副本。
		
	ThreadLocal 本身并不存储值,
		它只是作为一个 key 保存到 ThreadLocalMap中,
		但是这里要注意的是它作为一个 key 用的是弱引用,
		因为没有强引用链,
		弱引用在 GC的时候可能会被回收。
		这样就会在 ThreadLocalMap 中存在一些 key 为 null 的键值对(Entry)。
		因为 key 变成 null 了,我们是没法访问这些 Entry 的,
		但是这些 Entry 本身是不会被清除的。
		如果没有手动删除对应 key 就会导致这块内存即不会回收也无法访问,也就是内存泄漏。
		
	使用完 ThreadLocal 之后,
		记得调用 remove 方法。 
		在不使用线程池的前提下,
		即使不调用 remove 方法,
		线程的"变量副本"也会被 gc 回收,即不会造成内存泄漏的情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白de成长之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值