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小白的入门面试笔记--线程局部变量之灵魂四问相关推荐

  1. Java高级开发工程师面试笔记

    最近在复习面试相关的知识点,然后做笔记,后期(大概在2018.02.01)会分享给大家,尽自己最大的努力做到最好,还希望到时候大家能给予建议和补充 ----------------2018.03.05 ...

  2. CMMI视频推荐(1)灵魂四问CMMI轻松入门

    说明: "5分钟学CMMI"系,这不是广告,而是真心觉得这几个视频不错.每个视频长度约5至8分钟,简短.精炼.重点突出,是精心制作的产品,所以推荐出来. 建议首先看第一部" ...

  3. java web开发入门学习笔记(手打超细版)

    我刚实习的时候写的,先分享分享吧,当时写的也不容易.有错的话请指出,博主会修正,适合入门小白当资料使用.包括包括java基础.数据库.js.jQuery.css.html等等知识点. 详细笔记内容如下 ...

  4. SpringBoot-自动配置-源码解析,Java高级程序员面试笔记宝典

    我们挨个分析. []( )@SpringBootConfiguration 点进去我们发现,它就是一个Configuration @Configuration@Indexedpublic @inter ...

  5. 研一学习笔记-小白NLP入门学习笔记

    ⭐️我叫恒心,一名喜欢书写博客的研究生在读生. 原创不易~转载麻烦注明出处 1 前言 离研究生新生开学还有一个月左右的时间了欧,相信研0的小伙伴们,或多或少都会有这么一段迷茫期,如果你即将从事自然语言 ...

  6. Java小白从入门到入土 Day03

    8>图片 语法  <img/> 属性    src=""          网页需要引用的图片地址   title=""        鼠标悬 ...

  7. 腾讯Java开发面试凉凉,Redis灵魂14问?看完直接跪服

    前言 MyBatis是一个支持普通SQL查询.存储过程和高级映射的优秀持久层框架.MyBatis 去掉了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML ...

  8. 线程池面试题灵魂三问

    线程池面试问题 1.日常工作中有用到线程池吗?什么是线程池?为什么要使用线程池? 2.ThreadPoolExecutor都有哪些核心线程? 3.什么是阻塞队列?说说常用的阻塞队列? 1.日常工作中有 ...

  9. 《Java并发编程入门与高并发面试》or 《Java并发编程与高并发解决方案》笔记

    <Java并发编程入门与高并发面试>or <Java并发编程与高并发解决方案>笔记 参考文章: (1)<Java并发编程入门与高并发面试>or <Java并发 ...

最新文章

  1. java代码如何能运行起来_Java代码如何运行
  2. HBase性能优化方法总结(4):读表操作
  3. Java程序猿的JavaScript学习笔记(10—— jQuery-在“类”层面扩展)
  4. 替换字符串中指定的字符--随手源码
  5. [独库骑行之我们穿过草原]巴音布鲁克大草原
  6. 图像分类数据库_图像分类器-使用僧侣库对房屋房间类型进行分类
  7. php实现数据排序算法,PHP实现数据结构中的排序算法_PHP教程
  8. JAVA基础——IO流字节流
  9. selenium IDE Chrome下载安装与使用
  10. javaweb开发后端常用技术_java web后端开发技术
  11. synchronized.2
  12. 管理距离 动态协议端口号 协议号
  13. kaldi的安装使用
  14. 如何用C语言来求次幂(快速幂算法)
  15. Win11调整分区大小的方法有哪些?
  16. 文件无访问权限解决办法
  17. python定义一个有长度的列表
  18. vue组件的v-model
  19. 三国志英杰传--单挑表和宝物列表
  20. ORA-01438: 值大于为此列指定的允许精度

热门文章

  1. D2RQ平台之本体操作
  2. SQL SERVER 去掉字符串左边的0
  3. java操作文件之文件重命名
  4. Python # 扫描端口功能 # 获取网卡的Mac地址 # 局域网扫描器IP地址和MAC地址,获取网卡名称和其ip地址
  5. python中while循环并列_Python中while循环的一个问题
  6. 【烈日炎炎战后端】MySQL理论(2.8万字)
  7. Vue3.0系列(一): VUE3.0的新特性
  8. 国产可替代电机芯片AT8236驱动控制
  9. Markdown详细教程
  10. 美国东北大学计算机科学,美国东北大学计算机专业排名