1. 使用场景:多线程并发的场景。
  2. 作用:ThreadLocal在同一线程,不同方法中传递公共变量,
  3. 特性:线程隔离,每个线程都是独立,不会互相影响

ThreadLocal与synchronized的区别

ThreadLocal与synchronized关键字都用与处理多线程并发访问变量的问题,但这两者角度和思路不同

synchronized ThreadLocal
原理 同步机制,采用的是以时间换空间的方式,只提供了一份变量,让不同的线程排队访问 ThreadLocal采用的是以空间换时间,为每一个线程都提供了一份变量副本,从而实现同时访问而互相不干扰
侧重点 多线程之间访问资源的同步 多线程中让每个线程之间的数据相互隔离

ThreadLocal的内部结构

jdk8中,每个Thread维护一个ThreadLocalMap这个Map的key是ThreadLocal的实例对象本身

弱引用与ThreadLocal有什么关联呢?

当使用threadlocal 存储时

Untitled

thread就从绑定这个线程并获取维护的ThreadLocalMap,存键值对

Untitled

追寻源码Entry

Untitled

Entry继承了弱引用,super掉用了弱引用