关于ThreadLocal最直白的解释
ThreadLocal 底层原理如下:

实线是强引用,虚线是弱引用
Thread 持有 ThreadLocal 对象的引用,ThreadLocalMap 是 Thread 的成员变量,它是一个 Map,key 是 ThreadLocal 对象, value 是我们 set 进去的值
和 Map 一样,每一对 key:value 封装成了一个 Entry 对象,它的 key 是虚引用,也就是上图的虚线

这里为什么是虚引用?如果是强引用会发生什么问题?
假设 Entry 是强引用,那么当线程执行完毕后,就会变成下面这样

ThreadLocal 没有被使用,但是也无法被 JVM 回收,导致内存泄漏
如果是虚引用的话,当线程结束后,ThreadLocal 会被 JVM 回收,如下所示

这就引出了为什么我们使用完 ThreadLocal 后需要将 remove 操作
如果不进行 remove ,会堆积很多 null:value 的 Entry 导致内存泄漏
顺带提一下 Java 中的四种引用:
- 强引用:new 出来的都是强引用类型,只要当它没有引用时才会被 JVM 回收
- 软引用:在内存足够的情况下,即便没有引用也不会被回收,内存不足时,就算有引用也会被回收
- 弱引用:只要发生 GC,对象就会被回收
- 虚引用:一般我们可以不用太关注,它是记录引用的引用
关于ThreadLocal最直白的解释的更多相关文章
- [转]ThreadLocal使用
引言 ThreadLocal的官方API解释为: “该类提供了线程局部 (thread-local) 变量.这些变量不同于它们的普通对应物,因为访问某个变量(通过其 get 或 set 方法)的每个线 ...
- Java ThreadLocal 使用详解
ThreadLocal的官方API解释为: "该类提供了线程局部 (thread-local) 变量.这些变量不同于它们的普通对应物,因为访问某个变量(通过其 get 或 set 方法)的每 ...
- java高并发系列 - 第24天:ThreadLocal、InheritableThreadLocal(通俗易懂)
java高并发系列第24篇文章. 环境:jdk1.8. 本文内容 需要解决的问题 介绍ThreadLocal 介绍InheritableThreadLocal 需要解决的问题 我们还是以解决问题的方式 ...
- OpenCV击中击不中HMTxingt变换最容易理解的解释
OpenCV击中击不中变换是几个形态变换中相对比较拗口.不容易理解的,给初学者理解带来了很多困难,虽然网上也有许多的公开资料,原理和算法基本上介绍比较清晰,但是是要OpenCV进行形态变换大多还是说得 ...
- Handler系列之原理分析
上一节我们讲解了Handler的基本使用方法,也是平时大家用到的最多的使用方式.那么本节让我们来学习一下Handler的工作原理吧!!! 我们知道Android中我们只能在ui线程(主线程)更新ui信 ...
- 移动端全兼容的flexbox速成班
说起flexbox,都算是件陈年旧事了,它是2009年W3C提出的一种全新的可伸缩的CSS布局方式.依赖flexbox,我们可以更简单,高效的完成可伸缩式页面的布局. 业界与flexbox的相关教程文 ...
- INFO: task java:27465 blocked for more than 120 seconds不一定是cache太大的问题
这几天,老有几个环境在中午收盘后者下午收盘后那一会儿,系统打不开,然后过了一会儿,进程就消失不见了,查看了下/var/log/message,有如下信息: Dec 12 11:35:38 iZ23nn ...
- DDD:建模原语 之 四象图(转载的神文)
“模型.状态和行为特征.场景”和“四象图”,建模观的命名与立象. 建模原语:四象图 作者:achieveidea@gmail.com 命名:模型.结构特征.行为特征.场景(及其规约). 释义:模型,描 ...
- Android IOS WebRTC 音视频开发总结(四九)-- ffmpeg介绍
本文主要介绍ffmpeg,文章来自博客园RTC.Blacker,支持原创,转载必须说明出处,个人微信公众号blacker,更多详见www.rtc.help 说明: ps1:如果直接从webrtc开始学 ...
- ASP.NET不拖控件教程(1)-认识JSON
我讲讲脱离ASP.NET控件必备的一步,JSON和使用JQuery获取JSON吧! 高手跳过,写给学习中的人的.这篇帖子是假设你会使用JQuery(JQ这么普及,应该不至少没学过吧!真没学过以后再开帖 ...
随机推荐
- CentOS6.4中yum命令安装php5.2.17[转载未亲测]
最近给公司部署服务器的时候发现他们提供的服务器是centos6.4系统的,装好系统和相关服务httpd,mysql,php,一跑代码,发现php5.3中的zend加密不能用,安装Zend Guard ...
- 浅谈TypeScript对业务可维护性的影响
前言 笔者认为, TypeScript是服务于业务的, 核心就是提高代码的可维护性. TypeScript是把双刃剑, 如果类型系统使用的不好, 反而会阻碍开发, 甚至最后就变成了anyScript. ...
- Oracle 简单的创建一个定时任务job
Oracle 简单的创建一个定时任务job Oracle 简单的创建一个定时任务job 没有什么前置步骤,无非就是把存储过程或者SQL提前写好,就不说了,直接执行一下下面的语句即可创建一个job de ...
- 力扣142(Java)-环形链表Ⅱ(中等)
题目: 给定一个链表的头节点 head ,返回链表开始入环的第一个节点. 如果链表无环,则返回 null. 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环. 为了表示 ...
- 力扣1235(java)-规划兼职工作(困难)
题目: 你打算利用空闲时间来做兼职工作赚些零花钱. 这里有 n 份兼职工作,每份工作预计从 startTime[i] 开始到 endTime[i] 结束,报酬为 profit[i]. 给你一份兼职工作 ...
- 力扣258(java)-各位相加(简单)
题目: 给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数.返回这个结果. 示例 1: 输入: num = 38输出: 2 解释: 各位相加的过程为:38 --> 3 + 8 ...
- 云原生时代下,微服务体系与 Serverless 架构的发展、治理与融合
简介: 7 月 22.23 日为期两天的 2022 稀土开发者大会召开在即,此次阿里云 Serverless 研发负责人杨皓然(不瞋)作为大会出品人,带来<微服务与 Serverless> ...
- 携手数字人、数字空间、XR平台,阿里云与伙伴共同建设“新视界”
简介:2022阿里云视觉计算私享会:加速虚拟与现实的交互. 引言:2022年互联网行业里XR.数字孪生.虚拟现实等领域再次"翻红".新旧概念频出,不少人相信这些技术将给当下的互联 ...
- vue框架keepAlive缓存的坑
页面跳转顺序index=>detail2=>detail3(三个页面不是单独请求数据,后两个页面是第一个页面数据的传递) detail2页面与methods同级: beforeRouteL ...
- Java ”框架 = 注解 + 反射 + 设计模式“ 之 反射详解
Java "框架 = 注解 + 反射 + 设计模式" 之 反射详解 每博一文案 无论幸福还是苦难,无论光荣还是屈辱,你都要自己遭遇与承受. ------ <平凡的世界> ...