AQS
2020-07-23 23:21:18 39 举报
为你推荐
查看更多
AQS(Advanced Queueing System)是一种先进的排队系统,它通过模拟现实世界中的排队现象,对服务设施的运行进行优化和管理。AQS能够有效地解决现实生活中的排队问题,如银行、医院、车站等场所的排队现象。通过对顾客到达时间、服务时间和服务台数量等因素的分析,AQS可以为管理者提供合理的排队策略,提高服务效率,降低顾客等待时间,提升顾客满意度。同时,AQS还可以为决策者提供有关排队系统的统计数据和预测信息,有助于制定更加合理的资源分配和运营管理方案。总之,AQS是一种实用的排队管理工具,对于提高服务质量和运营效率具有重要意义。
作者其他创作
大纲/内容
锁被释放,同步等待队列被清空,所有的节点被移动到条件等待队列中
tail
next
ConditionObject
prev
waitStatus:0
唤醒
head
spinning
thread:thread-2
nextWaiter
条件等待队列
thread:null
共享模式
同步等待队列
Node@3(tail)
AQS
firstWaiter
节点移动
status
thread-1加入队列,第一轮循环
waitStatus:-1 -> 0
waitStatus:-1
线程thread-1已经通过LockSupport.unpark(thread-1)解除阻塞继续运行,头节点本质是一个\"哑节点\"
线程thread-1和thread-2加入同步等待队列
waitStatus
Node@2
thread:thread-1
Node@1(head)
Node@3
lastWaiter
waitStatus:-2
传播方向
thread-1加入队列
waitStatus:-1
Node@1(tail-1)
thread-2加入队列
addWaiter
这个尾节点时从条件等待队列移动过来的
Node@X(tail)
Node@1
第三个节点变成第二个节点,开始竞争成为头节点
tryAcquire
node-3
node-2
node-1
竞争方向
tryAcquireShared
通过LockSupport.park(this)进行阻塞
releaseShare(1)并且tryAcquireShared(arg)>0为true
Node@X
线程thread-2加入队列,p == head && tryAcquire(arg)为false
Node@3(head)
竞争头节点成功,晋升为头节点
success/unpark
Node@2(head)
thread:thread-3
线程thread-1和thread-2加入队列,tryAcquireShared(arg)<0为true
thread-3加入队列
调用release(1)通过tryRelease(1)更新status为1
线程thread-1加入队列,p == head && tryAcquire(arg)为false
thread-1加入队列,第二轮循环
通过LockSupport.park(this)阻塞线程thread-1
通过LockSupport.park(this)阻塞线程thread-2
独占模式
初始化状态,status = 0
Node@4(tail)
Node@Y
Node@2(tail)
只要tryAcquireShared(arg)>0依然为true,则继续唤醒后继的有效节点
0 条评论
回复 删除
下一页