若有收获,请记得分享和转发哦
无论是工作还是面试中,我们都会跟ThreadLocal
打交道,今天就跟大家聊聊ThreadLocal
的八个关键知识点哈~
ThreadLocal是什么?为什么要使用ThreadLocal
一个ThreadLocal的使用案例
ThreadLocal的原理
为什么不直接用线程id作为ThreadLocalMap的key
为什么会导致内存泄漏呢?是因为弱引用吗?
Key为什么要设计成弱引用呢?强引用不行?
InheritableThreadLocal保证父子线程间的共享数据
ThreadLocal的应用场景和使用注意点
1. ThreadLocal是什么?为什么要使用ThreadLocal?
ThreadLocal是什么?
ThreadLocal
,即线程本地变量。如果你创建了一个ThreadLocal
变量,那么访问这个变量的每个线程都会有这个变量的一个本地拷贝,多个线程操作这个变量的时候,实际是在操作自己本地内存里面的变量,从而起到线程隔离的作用,避免了并发场景下的线程安全问题。
//创建一个ThreadLocal变量
static ThreadLocal<String> localVariable = new ThreadLocal<>();
为什么要使用ThreadLocal
并发场景下,会存在多个线程同时修改一个共享变量的场景。这就可能会出现线性安全问题。
为了解决线性安全问题,可以用加锁的方式,比如使用synchronized
或者Lock
。但是加锁的方式,可能会导致系统变慢。加锁示意图如下: