BlockQueue
2021-04-15 17:09:20 10 举报
BlockQueue阻塞队列模型
作者其他创作
大纲/内容
waitStatus = 0
waitStatus=CONDITION
ThreadA
notFull.await()
next
如果是put赛数据,当发现队列中元素个数达到阈值 则进入notFull中阻塞 并释放锁
Node
waitStatus = CONDITION
ThreadE
ThreadC
nextWaiter
lastWaiter
如果是put赛数据,当发现队列中元素个数没有达到阈值 则添加元素 并且唤醒notEmpty中阻塞的线程 并释放锁
tail
firstWaiter
如果是take取,当发现队列中有元素 则将元素放入数组并且唤醒notFull 队列中阻塞的线程
head
ThreadB
notEmpty.await()
如果是take取,当发现队列中没有元素 则进入notEmpty中阻塞 并释放锁
exclusiveOwnerThread = ThreadA
lock.lock() 成功
waitStatus = SIGNAL
AQS队列
ThreadD
notEmpty.signal()
Condition队列-notEmpty
notFull.signal()
prev
Condition队列-notFull
state = 1
0 条评论
下一页