1、Thread-1执行await,等待主线程放行;
2、Thread-2执行await,等待主线程放行;
3、主线程执行countDown()放行。
1、CountDownLatch的初始计数器就是直接设置AQS的同步状态值state
2、countDown就是对state执行减1
3、当state为0的时候,放行。
只要state是0,则所有获取资源的申请都会成功,这就是共享锁的含义。
此时,自旋获取一次也会失败,会进行阻塞,进入【等待队列】
private void setHeadAndPropagate(Node node, int propagate) {
Node h = head; // Record old head for check below
setHead(node);//设置当前节点为头节点
if (propagate > 0 || h == null || h.waitStatus < 0 ||
(h = head) == null || h.waitStatus < 0) {
Node s = node.next;
if (s == null || s.isShared()) //后继节点如果是共享的,则依次唤醒后继节点,这就是共享的原理
doReleaseShared();
}
}
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。