ThreadLocal
ThreadLocal是什么
ThreadLocal是除了加锁之外的一种规避多线程不安全的方法。
ThreadLocal怎么做到线程隔离
ThreadLocal是JDK包提供的,它提供线程本地变量,如果创建一个ThreadLocal变量,那么访问这个变量的每个线程都会有这个变量的一个副本,在实际多线程操作的时候,操作的是自己本地内存中的变量,从而规避了线程安全问题。
ThreadLocal能用来做什么
- 主要就是Spring的连接器管理模块,每个线程持有的connect变量是单独使用的;
- 项目中遇到过有些时间不对的问题,是因为SimpleDateFormat线程不安全。后来把SimpleDateFormat包装到ThreadLocal中,使用ThreadLocal获取SimpleDateFormat;
- 每次请求的用户、APP等信息放在ThreadLocal中。
ThreadLocalMap底层结构是什么样的
是一个继承了WeakRefrence的Entry的数组。设置值的时候如果key的hash值相同,并且key不同,则寻找下一个为空的位置。
ThreadLocal实例和值存放位置
存放在堆中,通过一些技巧将可见性修改成了线程可见。
ThreadLocal内存泄漏
原因:因为ThreadLoc