登录 |  注册
首页 >  服务器/安全 >  Vmware 虚拟机使用入门教程 >  说说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,也不会回收强引用来解决内存不足的问题

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

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

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

<<上一课程
推荐文章
  • 1、首先,打开VM虚拟,在顶部点击虚拟机的选项卡,再在往下弹出的菜单中点击安装vmwaretools。2、然后,在虚拟机系统中弹出的自动播放的窗口中点击运行setup64.exe。3、接着,在进入到的欢迎界面的窗口中点击底部的下一步按钮。4、之后,根据界面的跳转和提示,再点击底部的安装按钮。5、如图
  • netstat命令用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。netstat是在内核中访问网络及相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告。如果你的计算机有时候接收到的数据报导致出错数据或故障,你不必感到奇怪,
  • jstat命令可以查看堆内存各部分的使用量,以及加载类的数量。命令的格式如下: jstat [-命令选项] [vmid] [间隔时间/毫秒] [查询次数] 注意!!!:使用的jdk版本是jdk8.类加载统计:Loaded:加载class的数量Bytes:所占用空间大小Unloaded:未加载数量By
  • 1.打开网址:https://visualvm.github.io/index.html2.点击Plugins3.点击PluginsCenters4.选择和自己JDK版本对应的5.点击VisualGC6.启动VisualVM cmd输入:jvisualvm,启动VisualVM7.点击工具中的插件8
  • JVM监控工具VisualVM:jvisualvm.exeVisualVM是Netbeans的profile子项目,已在JDK6.0update7中自带(java启动时不需要特定参数,监控工具在bin/jvisualvm.exe),能够监控线程,内存情况,查看方法的CPU时间和内存中的对象,已被GC
  • 注册服务打开cmd,进入到【部署tomcat的根目录】Tomcat7.0.65_1/bin,输入 service.batinstall 服务名(修改服务名称)比如我注册的 service.bat install  yukx如果一台服务器同时注册多个tomcat服务,也是按照以下步骤打开Tomcat8
学习大纲