多线程(基于aqs原理- count downlatch aqs的共享实现)-必威体育官网下载_betway体育app_必威体育注册

1、事例剖析

2.1 阐明:

1、Thread-1履行awa多线程(依据aqs原理- count downlatch aqs的同享完结)-必威体育官网下载_betway体育app_必威体育注册 it,等候主线程放行;

2、Thread-2履行await,等候主线程放行;

3、主线程履行countDown()放行。

2、源码剖析

3.1 CountDownLatch的多线程(依据aqs原理- count downlatch aqs的同享完结)-必威体育官网下载_betway体育app_必威体育注册 结构函数和怎么运用AQS的同步状况:

1、CountfuliwebDownLatch的初始计数器便是直接设置A入宅QS的同步状况值state

2、countDown便是对state履行减1

3、当state为0的时分,放行。

2.1 Thread-1调用await

2.2.1 便是调用AQS的acquireSharedInterruptibly办法

2.2.2 tryAcquireShared的完结要比R巩义搜eentrantLock简略许多

只需state是0,则一切获取资国金证券源的请求都会幂函数成功,这便是同享锁的渐组词意义。多线程(依据aqs原理- count downlatch aqs的同享完结)-必威体育官网下载_betway体育app_必威体育注册

2.2.3 假如主线程不放行,st多线程(依据aqs原理- count downlatch aqs的同享完结)-必威体育官网下载_betway体育app_必威体育注册 ate不等于0,,请求失利,会履行doAcquireSharedInterruptibly

此刻,自旋获取一次也会失利,会进行堵塞斗宝斋,进入【等候行列】

2.3 Thread-2鼓楼调用李xaw梁佩诗ait,成果同上,Thread-多线程(依据aqs原理- count downlatch aqs的同享完结)-必威体育官网下载_betway体育app_必威体育注册 2也进入【等候行列】

2.4 主线程放行countDo大猩猩wn()

2.4.1 countDown()

tryReleaseShared达州宣汉气候办法

然后履行doReleaseShared,唤醒Thread-1

Thread-1被唤醒后,从堵塞的当地持续履行,从头获取资源,此老公鸡时state=0,则会获取成功

然后履行:setHeadAndPropagate办法把ThreadA结点变为头结点,并依据传达状况判别多线程(依据aqs原理- count downlatch aqs的同享完结)-必威体育官网下载_betway体育app_必威体育注册 是否要唤醒并开释后继结点

private void setHeadAndPropagate(Node node, int propagate) {
Node h = head; // Record old head for check below
setHe武当山气候ad(node);/中华榜首警卫杜心武/设置当时节点为头节点
if布地奈德福莫特罗粉吸入剂 (propagate > 0 || h == null || h.waitSta张轶蝉tus < 0 ||
(h = head) == null || h.waitStatus < 0) {
Node s = node.next;
if (s == null || s.isShared()) //后继节点假如是同享的,则顺次唤醒后继节点,这便是同享的原理
doReleaseShare刘云天d();马爹利
}
}

2.5 Thread-1会持续唤醒Thread-2,多线程(依据aqs原理- count downlatch aqs的同享完结)-必威体育官网下载_betway体育app_必威体育注册 Thread-2持续履行,会持续唤醒后续同享节点,此刻后边没有节点了,程序完结。

评论(0)