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

尼罗发表小说做的的网站是哪个长沙关键词快速排名

尼罗发表小说做的的网站是哪个,长沙关键词快速排名,oa系统管理平台,长春小程序开发制作背景 在我们实际业务开发过程中,会遇到这样的场景,需要在单个线程整个生命周期内部保存全局的数据信息,比如说:单个线程内部全局唯一数据库连接、唯一的日志记录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/a/611269.html

相关文章:

  • 建立主题网站的顺序一般是西安知名网站建设公司排名
  • HTML 脚本:基础、应用与未来趋势
  • 网站建设费属于业务宣传费吗网站程序组成
  • Blazor全栈是个陷阱
  • 【多源 BFS】3.地图中的最⾼点(medium)
  • 网站建设需要学代码吗巴中企业网站建设
  • 开发网站公司交税网站建设php的心得和体会
  • 超参数调优:Grid Search 和 Random Search 的实战对比
  • 编译语言有哪些 | 探索编译语言的种类及其应用领域
  • 网站的弹窗是怎么做的ol游戏大全排行榜
  • 玩转Docker | 使用Docker部署Tomcat服务器
  • RHCA - DO374 | Day06:管理任务执行
  • html5移动网站开发实践做招聘信息的网站有哪些内容
  • 天际股份、天赐材料、多氟多、永太科技、联化科技、深圳新星,6家龙头公司研发实力深度数据
  • 北京公司注册核名网站网络营销业务流程
  • 常用的设计网站有哪些如何查询一个网站的空间大小
  • 【题解】洛谷 P2330 [SCOI2005] 繁忙的都市 [生成树]
  • 创建网站鞍山站
  • 网站建设规划书河北浏览器大全网址
  • 物理层数字调制技术介绍
  • 手机网站排名优化网站网络营销怎么做
  • 服装网站建设目标客户新闻发布网站如果做
  • C语言在线编译运行 | 提供高效便捷的编程学习平台
  • 响应式网站开发方法用jquery做网站好吗
  • 【论文阅读17】-结合大模型与小模型的类脑认知驱动模型工厂在工业物联网故障诊断中的应用
  • 商贸公司营销网站建设新媒体网站建设费用详单
  • 连城县住房和城乡建设局 网站顺德互动交流网站
  • 线程池原理复习
  • 营销型网站特征wordpress用户中心模板
  • 上下文中使用异步IO