当前位置: 首页 > news >正文

并发编程笔记8--ThreadLocal结构详解

ThreadLocal,即线程变量,是一个以ThreadLocal对象为键,任意对象为值的存储结构。这个结构被附带在线程上,也就是说一个线程可以根据一个ThreadLocal对象查询到绑定在这个线程上的值。可以通过set(T)方法来设置一个值,在当前线程下在通过get()方法获取到原先设置的值。
首先来看下set方法,基于JDK8

/*** 将此线程局部变量的当前线程副本设置为指定值。大多数子类不需要重新此方法,* 仅依靠initialValue方法来设置线程局部变量的值** @param value the value to be stored in the current thread's copy of*        this thread-local.*/public void set(T value) {Thread t = Thread.currentThread();ThreadLocalMap map = getMap(t);if (map != null)map.set(this, value);elsecreateMap(t, value);}/*** 获取与ThreadLocal关联的map,在InheritableThreadLocal中重写** @param  t the current thread* @return the map*/ThreadLocalMap getMap(Thread t) {return t.threadLocals;}

在set方法中,首先获取当前线程,然后获取当前线程关联的ThreadLocalMap,而ThreadLocalMap是ThreadLocal类中定义的一个结构。ThreadLocalMap的部分源码如下:

static class ThreadLocalMap {static class Entry extends WeakReference<ThreadLocal<?>> {/** The value associated with this ThreadLocal. */Object value;Entry(ThreadLocal<?> k, Object v) {super(k);value = v;}}
}

其在ThreadLocalMap中定义了一个Entry对象用来存储我们在set方法中方的值。

ThreadLocal介绍

http://www.lryc.cn/news/353307.html

相关文章:

  • 强烈推荐 20.7k Star!企业级商城开源项目强烈推荐!基于DDD领域驱动设计模型,助您快速掌握技术奥秘,实现业务快速增长
  • 【C++STL详解(四)------vector的模拟实现】
  • 租赁系统|北京租赁系统|租赁软件开发流程
  • JAVA面试题大全(十四)
  • Web Accessibility基础:构建无障碍的前端应用
  • 谈谈你对 SPA 的理解?
  • JAVA给一个JSON数组添加对象
  • 设计一个完美的用户角色权限表
  • Git 基本使用
  • LabVIEW使用PID 控制器有哪些应用场景?
  • UTC与GPS时间转换-[week, sow]
  • JVM性能调优:内存模型及垃圾收集算法
  • 不靠后端,前端也能搞定接口!
  • 如何秒杀Promise面试题
  • linux文件权限常用知识点,基于Linux(openEuler、CentOS8)
  • 【前端笔记】记录一个能优化Echarts Geo JSON大小的网站
  • 车与网络之间(V2N)简介
  • .Net Core WebAPI参数的传递方式
  • 10款免费黑科技软件,强烈推荐!
  • DFS:解决二叉树问题
  • 【相机开发问题总结】曝光补偿ExposureCompensation未生效异常分析及解决
  • Flutter 中的 DateRangePickerDialog 小部件:全面指南
  • MCS-51伪指令
  • vue3 vant4实现抖音短视频功能
  • C#结合JS实现HtmlTable动态添加行并保存到数据库
  • Unity Render Streaming 云渲染 外网访问
  • 美易官方:Copilot全面升级!
  • 深入了解FreeRTOS:实时操作系统的核心概念和应用
  • Spring框架学习笔记(五):JdbcTemplate 和 声明式事务
  • 考研计组chap1计算机系统概述