AQS分析
2021-01-24 21:34:05 7 举报
AQS分析
作者其他创作
大纲/内容
block等待被唤醒
return:false
获取同步锁,锁重入
NonfairSynclock()
AQSacquire(int)
1、再次尝试获取锁;2、修改prev的waitStatus值为-1;3、阻塞head所指的线程
ReentrantLock.NonfairSynctryAcquire(int)
state=0
FairSynclock()
AQSaddWaiter(Node)
ReentrantLock.SyncnonfairTryAcquire(int)
AbstractQueuedSynchronizer(AQS)
AbstractOwnableSynchronizersetExclusiveOwnerThread(Thread)
return:true
在UML中:1、public类型用“+”表示;2、protected类型用“#”表示;3、private类型用“-”表示
获取到锁,修改lock属性lock sync head=null tail=null state=0 ->1 exclusiveOwnerThread=null -> 线程t1的引用
end
将要被阻塞的线程放入同步等待队列
ReentrantLocklock()
ReentrantLock lock = new ReentrantLock()lock sync head=null tail=null state=0 exclusiveOwnerThread=null
Node
-waitStatus:int-prev:Node-next:Node-thread:thread-nextWaiter:Node
+ operation1(params):returnType- operation2(params)- operation3()
0 条评论
下一页