登录 |  注册
首页 >  面试合集 >  Java系列面试复习笔记-更新中 >  说说ThreadLocal 你是怎么用的?

说说ThreadLocal 你是怎么用的?

一、Threadlocal可以解决什么问题?

1、缓存登录信息,使用Threadlocal来保存系统的登录用户信息user等

2、用于保存线程不安全的工具类,典型的需要使用的类就是 SimpleDateFormat等。

3、在Spring的Web项⽬中,我们通常会将业务分为Controller层,Service层,Dao层, 我们都知道@Autowired注解默认使⽤单例模式,那么不同请求线程进来之后,由于Dao层使⽤单例,那么负责数据库连接的Connection也只有⼀个, 如果每个请求线程都去连接数Dao层中装配的Connection肯定是线程安全的,其解决⽅案就是采⽤ThreadLocal⽅法,当每个请求线程使⽤Connection的时候, 都会从ThreadLocal获取⼀次,如果为null,说明没有进⾏过数据库连接,连接后存⼊ThreadLocal中,如此⼀来,每⼀个请求线程都保存有⼀份 ⾃⼰的Connection。于是便解决了线程安全问题

二、Threadlocal是什么?

    ThreadLocal是线程Thread中属性,即ThreadLocal.ThreadLocalMap的管理者,ThreadLocal用于给每个线程操作自己线程的本地变量,通过线程私有从而保证线程安全性。

三、Threadlocal内存泄漏的问题

    ThreadLocal.ThreadLocalMap.Entry中的key是弱引用的,也即是当某个ThreadLocal对象不存在强引用时,就会被GC回收,但是value是基于强引用的,所以当key被回收,但是value还存在其他强引用时,就会出现内存的泄露情况,在最新的ThreadLocal中已经做出了修改,即在调用set、get、remove方法时,会清除key为null的Entry,但是如果不调用这些方法,仍然还是会出现内存泄漏 ,所以要养成用完ThreadLocal对象之后及时remove的习惯。

知识补充:

  • 强引用,我们使用的大部分引用都是强引用,特点就是当内存不足时,垃圾回收器宁愿自己抛出OOM,也不会回收强引用来解决内存不足的问题

  • 软引用,就是生杀大权都在垃圾回收器中,我内存够的话,你可以活着,如果不够的话,我就回收你,给我腾地方;

  • 弱引用,只要垃圾回收器扫到,不管空间够不够,都给我回收了;

  • 虚引用,形同虚设的东西,在任何情况下都可能被回收

<<上一课程
推荐文章
  • 之前看过一篇文章介绍H标签的使用方法:H1必须有只能是一个,H2标签可以是多个。不同标签的作用h1和h2标签主要是提高关键词的密度更容易让蜘蛛抓取我们首先要明白HEADER标签是什么。HEADER标签就是HTML语言中的h1到h6定义标题头的六个不同文字大小的TAGES。本质是为了呈现内容结构,共有
  • 高并发下如何设计秒杀系统?秒杀系统是网络商家为了促销等目的进行的网上限时抢购活动。比如某宝某东某夕夕上的秒杀。用户在规定的时间内,定时定量的秒杀,无论商品是否秒杀完毕,该场次的秒杀活动都会结束。秒杀系统具有瞬时流量、高并发读、高并发写以及高可用等特点。秒杀时会有大量用户在同一时间进行抢购,瞬时并发访
  • 经常做仓储管理系统,很少关注电商系统,之前兼职做过一个电商系统,其对应的商品档案就很容易和仓储管理系统混淆,今天抽个时间整理下他们在前端展示的区别和联系。一个电商系统,SPU、SKU、快照等设计的好坏,影响到后面的开发进度,以及架构的调整等。而SPU、SKU、快照又是一个电商系统的核心。SPU,是s
  • Java8新特性中最为重要的便是Lambda表达式和StreamAPI了,先来了解一下Lambda表达式吧。Lambda表达式Lambda表达式是一个匿名函数,我们可以将Lambda表达式理解为一段可以作为参数传递的代码,通过Lambda表达式,我们可以将Java程序变得更加简洁和灵活。来看一段程序
  • Java8中的Stream是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作(aggregateoperation),或者大批量数据操作(bulkdataoperation)。StreamAPI借助于同样新出现的Lambda表达式,极大的提高编程效率和
  • 要养成一个好的编码习惯从自己编码开始,对自己代码的合理化命名,编码不仅对自己有好处,而且别人也容易读懂你的代码。所以下载阿里的代码规范插件来约束自己凌乱的代码。阿里规范插件GitHub地址:https://github.com/alibaba/p3cIDEA安装该插件步骤:1.打开IDEA,File
学习大纲