ThreadLocal学习记录

在学习以及使用到threadLocal的时候,对其相关的细节理解不深并且也未做记录,
具体的源码不记录,
threadLocal 是什么:ThreadLocal提供一个线程局部变量,访问到某个变量的每一个线程都拥有自己的局部变量。说白了,ThreadLocal就是想在多线程环境下去保证成员变量的安全
ThreadLocal的思想是以空间换时间,而锁的思想是以时间换空间,threadLocal的实现就是讲成员变量的副本拷贝到自己的线程内部,
因为不同的线程之间是隔离的,所以可以通过这种方式实现线程安全。

其作用域覆盖线程,而不是某个具体任务;
其“自然”的生命周期与线程的生命周期“相同”(但在JDK实现中比线程的生命周期更短,减少了内存泄漏的可能)。
ThreadLocal代表了一种线程与任务剥离的思想,从而达到线程封闭的目的,帮助我们设计出更“健康”(简单,美观,易维护)的线程安全类。

ThreadLocal ,ThreadLocalMap 和Thread 的关系
这三者的关系由于大量的内部类的关系,第一次看的时候还是有点绕的 .建议先抛开内部类的关系,把每一个类当作普通类来看到,理解每個类的职责,最后再把内部类放进去考虑这样设计的目的。这里也给大家一个启示,面对复杂的事情的时候,我们需要跳出来,先把问题简单化,大方向把握了,再进一步去细化每一个功能点和设计的艺术
ThreadLocalMap 对使用者来说是透明的,可以当作空气,我们一值使用的都是ThreadLocal,这样的设计在使用的时候就显得简单,然后封装性又特别好
在这里插入图片描述

主要参考资料是:

  1. ThreadLocal使用及其实现原理:https://hogwartsrico.github.io/2020/11/19/The-use-and-implementation-of-ThreadLocal/index.html
  2. ThreadLocal的实现原理: https://monkeysayhi.github.io/2016/11/27/%E6%BA%90%E7%A0%81%7CThreadLocal%E7%9A%84%E5%AE%9E%E7%8E%B0%E5%8E%9F%E7%90%86/
public static final ThreadLocal listOfSuperPermissionObjectTreeResponse = new ThreadLocal; 这是一个具有公共、静态和最终修饰符的ThreadLocal变量。ThreadLocalJava中用于在每个线程中保存变量副本的类。在这种情况下,listOfSuperPermissionObjectTreeResponse是一个ThreadLocal对象,用于在每个线程中维护一个特定类型的值。 ThreadLocal类的源码中有一个内部静态类Entry,它继承自WeakReference<ThreadLocal<?>>,其中包含了与ThreadLocal对象关联的值。每个ThreadLocal对象都会在Entry中维护一个value,用于存储与当前线程相关联的特定值。当ThreadLocal对象被垃圾回收时,Entry对象也会被回收。 在源码中的ThreadLocal.withInitial(HashMap::new)部分是使用Supplier接口的方法,用于在每个线程中初始化ThreadLocal对象时提供一个初始值。在这种情况下,使用HashMap的构造函数作为初始值供应商。 总之,public static final ThreadLocal listOfSuperPermissionObjectTreeResponse = new ThreadLocal;声明了一个ThreadLocal变量,用于在每个线程中保存一个特定类型的值,并使用HashMap::new作为初始值供应商。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [java8源码-ac_babel:一些后端学习笔记整理](https://download.csdn.net/download/weixin_38704485/19390839)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [JAVA并发编程--5 理解ThreadLocal](https://blog.csdn.net/l123lgx/article/details/127439245)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值