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

网站风格规划百度广告代理公司

网站风格规划,百度广告代理公司,上海牛人岛企业服务有限公司,网线制作过程图片目录 一、ThreadLocal 要解决的核心问题 二、核心结构 1.Thread 类(线程载体) 2.ThreadLocal 类(访问入口&健生成器) 3.ThreadLocal.ThreadLocalMap 类(线程专属存储结构) 三、核心关系图&#x…

目录

一、ThreadLocal 要解决的核心问题

二、核心结构

1.Thread 类(线程载体)

2.ThreadLocal 类(访问入口&健生成器)

3.ThreadLocal.ThreadLocalMap 类(线程专属存储结构)

三、核心关系图:一切尽在图中

四、关键设计


ThreadLocal 是 Java 中实现线程隔离数据存储的核心工具。

一、ThreadLocal 要解决的核心问题

提供一种机制,让每个线程都能独立访问自己专属的变量副本,避免多线程环境下的竞争问题。常用于存储线程上下文信息(如用户会话)、数据库连接等。

二、核心结构

1.Thread 类(线程载体)

  • 每个 Thread 对象内部都有一个私有成员变量:threadLocals
  • threadLocals 的类型是 ThreadLocal.ThreadLocalMap
  • 这个 ThreadLocalMap 就是该线程专属的“储物柜”
// java.lang.Thread
ThreadLocal.ThreadLocalMap threadLocals = null;

2.ThreadLocal 类(访问入口&健生成器)

  • 开发者直接操作的类( get()set()remove()
  • 它本身不存储数据,而是作为访问 ThreadLocalMap 的媒介键(key)
  • 每个 ThreadLocal 实例通过其唯一的 threadLocalHashCode(在构造函数中计算生成)标识自己,用于在 ThreadLocalMap 中查找对应的值

3.ThreadLocal.ThreadLocalMap 类(线程专属存储结构)

  • ThreadLocalMap 是 ThreadLocal 的静态内部类
  • 它是线程(Thread)的私有成员变量(threadLocals)
  • 它本质上是一个定制化哈希表,专门用于存储以 ThreadLocal 为键、用户数据为值的键值对
  • 核心结构:Entry[] table
    (1)Entry 是继承自 ThreadLocalMap 的静态内部类
    (2)Entry 继承自 WeakReference<ThreadLocal<?>>
    (3)键(key):是 ThreadLocal 实例的弱引用(WeakReference)
    (4)值(value):是用户存储的实际数据(强引用)
// ThreadLocal.ThreadLocalMap.Entry
static class Entry extends WeakReference<ThreadLocal<?>> {Object value; // 用户存储的实际数据Entry(ThreadLocal<?> k, Object v) {super(k); // 将ThreadLocal作为弱引用value = v;}
}

三、核心关系图:一切尽在图中

ThreadLocal 的数据结构

四、关键设计

首先搞清楚 Java 的四种引用类型

  • 强引用:我们常常 new 出来的对象就是强引用类型,只要强引用存在,垃圾回收器将永远不会回收被引用的对象,哪怕内存不足的时候
  • 软引用:使用 SoftReference 修饰的对象被称为软引用,软引用指向的对象在内存要溢出的时候被回收
  • 弱引用:使用 WeakReference 修饰的对象被称为弱引用,只要发生垃圾回收,若这个对象只被弱引用指向,那么就会被回收
  • 虚引用:虚引用是最弱的引用,在 Java 中使用 PhantomReference 进行定义。虚引用中唯一的作用就是用队列接收对象即将死亡的通知

1.弱引用键(key)

  • 目的:解决 ThreadLocal 对象本身的内存泄漏问题
  • 机制:当 ThreadLocal 实例(tlRef)不再被任何强引用指向时(例如开发者将其设置为 null),仅剩下 Entry.key 这个弱引用。在下一次 GC 发生时,tlRef 就会被回收,对应的 Entry.key 变为 null
  • 价值:防止因为线程长期存在(如线程池线程)导致 ThreadLocal 对象无法回收

2.强引用值(value)

  • 问题:如果 ThreadLocal 被回收(Entry.key == null),但 Entry.key 仍然被 ThreadLocalMap 的 Entry 强引用着,而 ThreadLocalMap 又被线程(Thread)强引用着。如果长期存在(如线程池),这个 value 就会一直占用内存,造成真正的内存泄漏
  • 解决方案:开发者必须显示调用 ThreadLocal.remove() 来删除不再需要的条目,或者在 get() / set() 过程中,ThreadLocalMap 会自动清理 key == null 的陈旧条目(惰性清理)

3.ThreadLocalMap 过期 key 的数据清理方式:探测式清理启发式清理

http://www.dtcms.com/wzjs/154173.html

相关文章:

  • 关于做美食的网站百度推广优化师培训
  • 武汉 网站制作知识付费小程序搭建
  • 鞍山+网站建设北京高端网站建设
  • 大丰做网站需要多少钱在线教育
  • 网站搭建的百度百家号怎么赚钱
  • 手机网站开发书籍哪个模板建站好
  • 做哪些网站可以赚钱的正规网站优化哪个公司好
  • 做英文网站内容来源枫树seo
  • 青岛 网站优化线上卖货平台有哪些
  • 四川网站建设设计公司武汉seo网络优化公司
  • 昆明网站建设费用什么是seo营销
  • 河间网站建设推广营销网络推广方式有哪些
  • 如何建网站老鱼网友情链接的四个技巧
  • 网站的备用金怎么做凭证北京关键词优化服务
  • 展示型网站一样做seo优化百度seo网络营销书
  • wordpress mysql重启星巴克seo网络推广
  • 一个网站有个前端后端怎么做百度搜索引擎优化方案
  • 昆明网页建站平台抖音关键词排名优化软件
  • 中国室内设计公司搜索引擎排名优化包括哪些方面
  • 网站开发需要什么资料郑州seo哪家专业
  • 从零开始做电影网站跨境电商培训机构哪个靠谱
  • 公司网站建站模板全网推广的方式
  • 深圳网站制作哪家好超级外链发布
  • 用群晖做网站今日新闻摘抄十条
  • 模板网站怎么做合肥网站seo推广
  • 政府办工作网站建设工作计划百度网盘资源搜索
  • 企业网站如何做seoseo排名优化北京
  • 海南省建设培训与执业资格注册中心网站市场调研
  • 网站模板框架企业网站推广优化
  • 做免费的网站教程搜索引擎排名2022