ThreadLocal 详解

发布时间 2023-05-02 20:54:37作者: 壹索007

1.ThreadLocal是什么? / 为什么要使用ThreadLocal?

ThreadLocal是什么?

  ThreadLocalThreadLocal类位于java.lang包下,由JDK包提供。如果创建了一个ThreadLocal变量,那么访问这个变量的每个线程都会有这个变量的本地副本,多个线程操作这个变量的时候,其实是在操作自己本地内存里的变量,他们可以使用 get()set() 方法来获取默认值或将其值更改为当前线程所存的副本的值,从而避免了线程安全问题

为什么要使用ThreadLocal?

  并发场景下,会存在多个线程同时修改一个共享变量的场景,这就可能会出现线程安全问题。为了解决线程安全问题,可以用加锁的方式,比如synchronized或者lock,但是加锁可能会导致系统变慢

 

 1.ThreadLocal的数据结构:

  Thread类有一个类型为ThreadLocal.ThreadLocalMap的实例变量threadLocals,也就是说每个线程有一个自己的ThreadLocalMap

  ThreadLocalMap有自己的独立实现,可以简单地将它的keyThreadLocal的一个弱引用value为代码中放入的值。

  每个线程在往ThreadLocal里放值的时候,都会往自己的ThreadLocalMap里存,读也是以ThreadLocal作为引用,在自己的map里找对应的key,从而实现了线程隔离

 

2.GC 之后 key 是否为 null?