ThreadLocal底层原理流程讲解
2025-08-01 20:33:07 0 举报
每个Thread对象都会持有一个ThreadLocalMap类型的成员变量,这是存储ThreadLocal变量的结构。 - ThreadLocalMap是一种基于哈希表的实现,用Entry数组存储ThreadLocal对象与其对应值的映射关系。 - Entry继承了WeakReference,并将ThreadLocal实例作为键,使用弱引用方式,使得如果没有强引用指向ThreadLocal,它可以被垃圾回收器回收。 - ThreadLocalMap的set(), get(), remove()方法通过操作ThreadLocal的散列后的引用地址来定位数据。
作者其他创作
大纲/内容
Entry[15]
thread=nullwaitStatus=SIGNAL
next
thread=ThreadBwaitStatus=SIGNAL
5
Node
ThreadLocal<Integer> local1 = new ThreadLocal<Integer>()
Thread0
KEY
Entry[1]
state=1
LockSupport.unpark(ThreadB)
prev
ThreadC
local
head
ThreadA获得了锁
Value
state=0
....
ThreadLocalMap
thread=ThreadCwaitStatus=0
tail
lock()
exclusiveOwnerThread=ThreadA
interrupted()进行复位
incr()
排队(按照先后顺序进行了排队操作)阻塞、唤醒
ThreadA
exclusiveOwnerThread=null
Entry[0]
lock.unlock()
lock.lock()
AQS
local1
ThreadLocal<Integer> local = new ThreadLocal<Integer>()
ThreadB
唤醒阻塞状态的线程
ReentrantLock

收藏
0 条评论
下一页