Java并发03ThreadLocal

本文详细探讨了ThreadLocal的工作原理、使用场景及其在内存管理中的特点。ThreadLocal通过创建线程局部变量,实现线程间的值隔离,避免了参数传递的繁琐。ThreadLocalMap作为ThreadLocal的内部类,其弱引用设计解决了内存泄漏问题,并使用线性探测解决哈希冲突。在实际应用中,ThreadLocal常用于存储如当前用户信息等线程内的共享数据。
摘要由CSDN通过智能技术生成

一.参考

1.使用及原理

https://www.jianshu.com/p/3c5d7f09dfbd

2.使用场景

https://www.cnblogs.com/zz-ksw/p/12684877.html
https://blog.csdn.net/Mind_programmonkey/article/details/118220731
https://www.cnblogs.com/yxysuanfa/p/7125761.html

二.可能会问的问题

1.Thread,ThreadLocalMap,ThreadLocal的对应关系

请添加图片描述

2.为什么ThreadLocalMap设计成ThreadLocal的内部类

3.ThreadLocalMap 什么时候开始和Thread 进行绑定的呢

2和3参考:https://blog.csdn.net/weixin_45127309/article/details/102746772

4.ThreadLocalMap什么情况下发生冲突?

通过map.set(threadLocal,value)插入entry,当两个不同的threadLocal的hash值相同时,产生冲突,利用线性探测解决冲突。

5.ThreadLocalMap中Entry的key为什么是弱引用?

参考:
https://zhuanlan.zhihu.com/p/139214244
https://www.cnblogs.com/waterystone/p/6612202.html

三.我自己的一点理解

基于这篇文章(https://blog.csdn.net/Mind_programmonkey/article/details/118220731)的典型场景2:当前用户信息需要被线程内所有方法共享。

  1. 在这种场景下,ThreadLocal对象引用是静态的,即整个进程就一份,多个线程拿到的实例是同一个。但根据运行结果来看,每个线程以同一个ThreadLocal对象为key,通过ThreadLocal的get()拿到的value又是每个线程自己独有的。
  2. 这个场景中ThreadLocal的使用很好的解释了ThreadLocal的两大优点:
    (1)具有线程隔离的效果,A线程内获取到是A线程对应的值,B线程获取到是B线程对应的值,即使ThreadLocal实例是同一个。
    (2)本线程内ThreadLocal设置过得值,可以让不同方法直接使用,避免参数传递的麻烦。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值