JUC-ThreadLocal

ThreadLocal 保存线程变量,保证了每个线程的变量不会相互干扰。

底层实现

ThreadLocal的底层是通过 ThreadLocalMap实现的,每个线程变量都有自己的 ThreadLoalMap变量。

而 ThreadLocalMap又由 Entry组成,其中 key 为 ThreadLocal,并且呗定义为为了弱引用, value是具体的值。

所以 ThreadLocal本身并不存储值,它只是作为一个引用

内存泄露的问题

因为 ThreadLocalMap是由 Entry组成的,Entry中的 key 被定义为了弱引用,导致了 key 在垃圾回收时会被清理掉,而 value 并不会,这些无法被清理的 value 会随着线程存活而逐渐累积,造成内存泄露,甚至引发内存溢出。所以在使用 ThreadLocal时,使用完成后,要及时调用清理方法 remove()

父子线程之间的参数传递

ThreadLocal 的变量只能在当前线程中获取,并不能在子线程中获取,如果想在子线程中获取到父线程都变量可以通过 InheritableThreadLocal 实现

InheritableThreadLocal 被创建后会从复制父线程 ThreadLocalMap中的值,从而可以在子线程中使用父线程的值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值