ThreadLocal简介
ThreadLocal是线程局部变量,多个线程访问时的值互不干涉,多个线程互相访问时不会获取对方的ThreadLocal变量。
在并发编程的时候,成员变量如果不做任何处理其实是线程不安全的,各个线程都在操作同⼀个变量,显然是不⾏的,并且我们也知道volatile这个关键字也是不能保证线程安全的。那么在有⼀种情况之下,我们需要满⾜这样⼀个条件:变量是同⼀个,但是每个线程都使⽤同⼀个初始值,也就是使⽤同⼀个变量的⼀个新的副本。这种情况之下ThreadLocal就⾮常适⽤,⽐如说DAO的数据库连接,我们知道DAO是单例的,那么他的属性Connection就不是⼀个线程安全的变量。⽽我们每个线程都需要使⽤他,并且各⾃使⽤各⾃的。这种情况,ThreadLocal就⽐较好的解决了这个问题。
ThreadLocal内存泄漏
由于ThreadLocal的生命周期跟Thread一样长,如果没有手动删除对应key的value就会导致内存泄漏,所以我们需要在每次set完ThreadLocal后和使用ThreadLocal后,需要对ThreadLocal进行remove操作,清除数据。