Java小白的入门面试笔记--线程局部变量之灵魂四问
1.ThreadLocal 是什么?
ThreadLocal俗名叫做线程局部变量,就是由ThreadLocal通过set方法填充的变量,它是只属于当前的线程,对于其他的线程来说是隔离的,是当前线程独有的变量。它的本质就是ThreadLocal在每一个线程当中都创建了一个自己的“副本”,每一个线程都只可以访问属于自己的副本变量,同一个ThreadLocal所包含的对象,在不同的Thread中有不同的几种副本。
2.ThreadLocal的特征有哪些?
线程局部变量是局限于线程内部的变量,只属于创建它的线程自身所有,不能与其他线程共享这一资源,是一种实现线程安全的方法。但是要注意:单个线程内可以共享,多个线程之间不可以共享。并且任何局部线程在使用结束之后没有释放的话,就会导致内存泄漏。(具体原因在原理中介绍)
3.ThreadLocal的原理?
在Thread类中有一个成员变量叫做ThreadLocalMap,它的底层实现是一种Map容器,它的键Key是ThreadLocal类,每一个线程拥有自己的申明为ThreadLocal类型的变量,所以它的值value就是这个线程本身。每个线程执行时都会把局部变量放在各自的帧栈的内存空间中,此变量生命周期是由该线程决定的,开始于第一次初始化(get或者set方法)。由ThreadLocal的工作原理决定了:每个线程独自拥有一个变量,并非共享或者拷贝。而为什么线程使用完后不释放会导致内存泄漏呢,因为ThreadLocalMap的键ThreadLocal类是一种弱引用,会在使用完成后由gc自动回收走,而它的值依然具有强引用便不会被自动回收,从而导致了内存的泄漏。所以在使用ThreadLocal后要记得将它remove。
4.ThreadLocal的使用场景?
需要为线程设置自己的局部变量来存储不同线程的私有数据,但是系统并没有这样的局部变量,如果采用实例属性那么必须对其进行同步。为了解决这一问题,系统为程序员提供了ThreadLocal类,它代表了线程的局部变量,它为每一个线程提供了独立的存储区域,这些线程在运行时只能看到自己的值,各个值之间也没有交叉和联系。
Java小白的入门面试笔记--线程局部变量之灵魂四问相关推荐
- Java高级开发工程师面试笔记
最近在复习面试相关的知识点,然后做笔记,后期(大概在2018.02.01)会分享给大家,尽自己最大的努力做到最好,还希望到时候大家能给予建议和补充 ----------------2018.03.05 ...
- CMMI视频推荐(1)灵魂四问CMMI轻松入门
说明: "5分钟学CMMI"系,这不是广告,而是真心觉得这几个视频不错.每个视频长度约5至8分钟,简短.精炼.重点突出,是精心制作的产品,所以推荐出来. 建议首先看第一部" ...
- java web开发入门学习笔记(手打超细版)
我刚实习的时候写的,先分享分享吧,当时写的也不容易.有错的话请指出,博主会修正,适合入门小白当资料使用.包括包括java基础.数据库.js.jQuery.css.html等等知识点. 详细笔记内容如下 ...
- SpringBoot-自动配置-源码解析,Java高级程序员面试笔记宝典
我们挨个分析. []( )@SpringBootConfiguration 点进去我们发现,它就是一个Configuration @Configuration@Indexedpublic @inter ...
- 研一学习笔记-小白NLP入门学习笔记
⭐️我叫恒心,一名喜欢书写博客的研究生在读生. 原创不易~转载麻烦注明出处 1 前言 离研究生新生开学还有一个月左右的时间了欧,相信研0的小伙伴们,或多或少都会有这么一段迷茫期,如果你即将从事自然语言 ...
- Java小白从入门到入土 Day03
8>图片 语法 <img/> 属性 src="" 网页需要引用的图片地址 title="" 鼠标悬 ...
- 腾讯Java开发面试凉凉,Redis灵魂14问?看完直接跪服
前言 MyBatis是一个支持普通SQL查询.存储过程和高级映射的优秀持久层框架.MyBatis 去掉了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML ...
- 线程池面试题灵魂三问
线程池面试问题 1.日常工作中有用到线程池吗?什么是线程池?为什么要使用线程池? 2.ThreadPoolExecutor都有哪些核心线程? 3.什么是阻塞队列?说说常用的阻塞队列? 1.日常工作中有 ...
- 《Java并发编程入门与高并发面试》or 《Java并发编程与高并发解决方案》笔记
<Java并发编程入门与高并发面试>or <Java并发编程与高并发解决方案>笔记 参考文章: (1)<Java并发编程入门与高并发面试>or <Java并发 ...
最新文章
- java代码如何能运行起来_Java代码如何运行
- HBase性能优化方法总结(4):读表操作
- Java程序猿的JavaScript学习笔记(10—— jQuery-在“类”层面扩展)
- 替换字符串中指定的字符--随手源码
- [独库骑行之我们穿过草原]巴音布鲁克大草原
- 图像分类数据库_图像分类器-使用僧侣库对房屋房间类型进行分类
- php实现数据排序算法,PHP实现数据结构中的排序算法_PHP教程
- JAVA基础——IO流字节流
- selenium IDE Chrome下载安装与使用
- javaweb开发后端常用技术_java web后端开发技术
- synchronized.2
- 管理距离 动态协议端口号 协议号
- kaldi的安装使用
- 如何用C语言来求次幂(快速幂算法)
- Win11调整分区大小的方法有哪些?
- 文件无访问权限解决办法
- python定义一个有长度的列表
- vue组件的v-model
- 三国志英杰传--单挑表和宝物列表
- ORA-01438: 值大于为此列指定的允许精度
热门文章
- D2RQ平台之本体操作
- SQL SERVER 去掉字符串左边的0
- java操作文件之文件重命名
- Python # 扫描端口功能 # 获取网卡的Mac地址 # 局域网扫描器IP地址和MAC地址,获取网卡名称和其ip地址
- python中while循环并列_Python中while循环的一个问题
- 【烈日炎炎战后端】MySQL理论(2.8万字)
- Vue3.0系列(一): VUE3.0的新特性
- 国产可替代电机芯片AT8236驱动控制
- Markdown详细教程
- 美国东北大学计算机科学,美国东北大学计算机专业排名