面试:ThreadLocal

目录

1、ThreadLocal可以实现〔资源对象】的线程隔离,让每个线程各用各的【资源对象】,避免争用引发的线程安全问题

2、ThreadLocal同时实现了线程内的资源共享

3、原理

4、为什么ThreadLocalMap 中的 key (即 ThreadLocal )要设计为弱引用?


1、ThreadLocal可以实现〔资源对象】的线程隔离,让每个线程各用各的【资源对象】,避免争用引发的线程安全问题

每个线程获取资源时都会询问当前线程是否有连接对象

所以每个线程都会创建一个专用的连接对象接着存入自己的线程,于是形成了线程间的资源隔离隔离

2、ThreadLocal同时实现了线程内的资源共享

同上所述,因为每个线程有一个自己专属的连接对象,所以在线程内,任务都调用的同一个连接对象,于是实现了线程内的资源共享

3、原理

ThreadLocalMap:每个线程内有一个ThreadLocalMap类型的成员变量,用来存储资源对象。

  • 调用set方法,就是以ThreadLocal自己作为key,资源对象作为value,放入当前线程的 ThreadLocalMap集合中
  • 调用get方法,就是以ThreadLocal自己作为 key,到当前线程中查找关联的资源值
  • 调用remove方法,就是以ThreadLocal自己作为 key,移除当前线程关联的资源值

ThreadLocal的扩容机制是在容量达到三分之二时对存值的HashMap进行倍增;

当遇到冲突时是进行开放寻址法,从顺序的第一个未存的地址依次往后存;

4、为什么ThreadLocalMap 中的 key (即 ThreadLocal )要设计为弱引用?

ThreadLocal的KEY是弱引用的,当java虚拟机内存不够时会将它们所占用的内存释放掉;

但GC(内存不足)仅是让key的内存释放,后续还要根据key是否为null 来进一步释放值的内存,释放时机有:

  • 获取key发现null key
  • set key时,会使用启发式扫描,清除临近的null key,启发次数与元素个数,是否发现 null key有关(把临近的null key释放掉)
  • remove时(推荐),因为一般使用ThreadLocal时都把它作为静态变量,因此GC无法回收

相关推荐

  1. ThreadLocal

    2024-04-25 06:36:06       38 阅读
  2. ThreadLocal

    2024-04-25 06:36:06       21 阅读
  3. 面试被问ThreadLocal要怎么回答?

    2024-04-25 06:36:06       11 阅读
  4. ThreadLocal介绍

    2024-04-25 06:36:06       17 阅读
  5. ThreadLocal和InheritableThreadLocal

    2024-04-25 06:36:06       36 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-25 06:36:06       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-25 06:36:06       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-25 06:36:06       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-25 06:36:06       20 阅读

热门阅读

  1. C# ToString

    2024-04-25 06:36:06       14 阅读
  2. 2024-04-24 问AI: 在深度学习中,CUDA 是什么?

    2024-04-25 06:36:06       15 阅读
  3. 【SAP ME 27】SAP ME创建开发组件(DC)serviceExt

    2024-04-25 06:36:06       14 阅读
  4. vue - 路由守卫

    2024-04-25 06:36:06       14 阅读
  5. Pytorch:Dataset类和DataLoader类

    2024-04-25 06:36:06       14 阅读
  6. 1-k8s集群安装报错CGROUPS_CPU: missing

    2024-04-25 06:36:06       12 阅读
  7. 设计模式简介之几大原则

    2024-04-25 06:36:06       14 阅读