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

淄博网站排名seosem账户托管公司

淄博网站排名seo,sem账户托管公司,淘宝网页制作视频教程,在长沙阳光医院做网站编辑背景 在我们实际业务开发过程中,会遇到这样的场景,需要在单个线程整个生命周期内部保存全局的数据信息,比如说:单个线程内部全局唯一数据库连接、唯一的日志记录id,线程用户信息等。 那么为什么不直接在线程内部采用局部变量呢&am…

背景

在我们实际业务开发过程中,会遇到这样的场景,需要在单个线程整个生命周期内部保存全局的数据信息,比如说:单个线程内部全局唯一数据库连接、唯一的日志记录id,线程用户信息等。
那么为什么不直接在线程内部采用局部变量呢?
这个涉及到线程内部方法调用传递参数比较麻烦,如果直接用Thread对象获取更加方便。

Thread线程对象

每个线程有自己独立的Thread对象

组成部分说明
虚拟机栈方法调用栈、局部变量表(线程私有)
本地方法栈执行 native 方法使用的栈(线程私有)
线程对象 Thread 本身每个线程创建时对应一个 Thread 实例
ThreadLocalMapThreadLocal 变量专属的存储空间(线程私有)
程序计数器(PC)当前执行的指令地址(线程私有)

ThreadLocalMap 的存储

Thread对象包含了一个私有变量
ThreadLocal.ThreadLocalMap threadLocals = null;
线程内部可以通过这个threadLocals成员属性拿到ThreadLocalMap,

ThreadLocalMap存储了什么呢?

他的每一个节点是一个Entry结构

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

这是什么意思呢?
就是相当于是一个键值对,他的key就是ThreadLocal对象,并且是弱引用,强引用就是我们在实际的方法栈中引用堆上的实例数据,弱引用是当JVM进行GC会回收掉他,前提是没有其他强引用。这样做是防止当前线程结束,线程回到了线程池,导致线程对象仍然间接引用着key,没有被垃圾回收,导致内存泄漏。
value值就是我们存储的数据值。

重要

key是弱引用,但是value是强引用,如果使用线程池,不释放,就会出现value内存泄漏,所以在线程结束时需要调用threadlocal的remove方法清楚数据。

threadLocalMap是一个Entry数组结构

  private Entry[] table;

每一个节点是一个ThreadLocal对象key,和一个值。

ThreadLocal对象

ThreadLocal对象是我们在代码中创建的存储数据的结构
例如:

	ThreadLocal local = new ThreadLocal();local.set(5);local.set(6);
ThreadLocal的set方法执行过程:
  1. 获取当前线程Thread对象的ThreadLocalMap实例对象
  2. 如果没有,null,那么就创建一个ThreadLocalMap,并且赋值给Thread对象的threadLocals
  3. 如果存在,就从ThreadLocalMap中获取到当前ThreadLocal对象为key的值,因为ThreadLocalMap是数组,就通过对ThreadLocal对象进行hash求知取到他的数组下标,如果这个下标不等于这个ThreadLocal对象,说明存在hash冲突,就通过开放寻址法,继续遍历下一个数组下标的元素,直到末尾。
  4. 找到之后,就可以设置value
  5. get方法也是一个逻辑

这样就达到了在多个线程中共享同一个ThreadLocal对象,互相操作对象内部的元素,但是又能实现资源的隔离

最后 吐槽一下

说实话,这种垃圾设计真的烧脑,引用链路复杂,晦涩难懂是正常人脑子能想出来的吗?简直是逆天
http://www.dtcms.com/wzjs/816566.html

相关文章:

  • 做论坛网站需要哪些前置审批房产大全
  • 苏州网站设计公司兴田德润怎么样网站建设中gif
  • 义乌做站外推广的公司网站搭建免费模板
  • 白云商城网站建设上海 有哪些做网站的公司
  • 网站的总体结构wordpress php5.2
  • 西安市做网站公司佛山官网建设
  • 城市分站网站设计个人网站开发教程
  • 网站服务器怎么配网站在广告法之前做的
  • 专门做童装的网站有哪些义乌建设局网站打不开
  • 短期网站建设培训利用新冠消灭老年人
  • 什么创网站网页设计素材与效果图
  • 建筑公司查询网站天津新亚太工程建设监理有限公司网站
  • 太原哪里做网站好余姚做网站62752762
  • 表格网站源码wordpress 中文采集
  • 苏宁网站建设免建网站
  • 做公众好号的网站wordpress 函数 chm
  • 涂鸦网站建设百度推广案例及效果
  • 国内wordpress著名网站wordpress 翻译语言
  • 常州网站制作案例广西机场建设公司
  • 哪些网站会盗取中国互联网网站性能
  • 网站建设公司费用网页设计网站名字
  • 公司网站设计图响应式网站建设流程
  • 上海外贸seo推广sem和seo是什么职业
  • qq空间个人网站企业网站的推广方式和手段有哪些
  • 做游戏网站的目地微信小程序超市平台
  • 电子政务网站建设流程wordpress新版编辑器开发
  • 怎么给自己的网站做扫描码黑龙江网络推广好做吗
  • 有网站教做水电资料吗做3d图的网站
  • 做ppt软件怎么下载网站如何免费建设一个网站
  • 专业做网文的网站好网站细节