这个方法的主要作用是把被唤醒的节点,设置成head节点。 然后继续唤醒队列中的其他线程。

由于现在队列中有3个线程处于阻塞状态,一旦ThreadA被唤醒,并且设置为head之后,会继续唤醒后续的ThreadB

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(); }
}

图解分析

setHeadAndPropagate相关推荐

  1. 转:AbstractQueuedSynchronizer的介绍和原理分析

    引自:http://ifeve.com/introduce-abstractqueuedsynchronizer/ 简介 提供了一个基于FIFO队列,可以用于构建锁或者其他相关同步装置的基础框架.该同 ...

  2. 一文搞懂 CountDownLatch 用法和源码!

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! CountDownLatch 是多线程控制的一种工具,它被 ...

  3. Java并发同步器AQS

    AQS是AbstractQueuedSynchronizer的简写,中文名应该叫抽象队列同步器(我给的名字,哈哈),出生于Java 1.5. 一.什么是同步器 多线程并发的执行,之间通过某种 共享 状 ...

  4. 源码级深挖AQS队列同步器

    我们知道,在java中提供了两类锁的实现,一种是在jvm层级上实现的synchrinized隐式锁,另一类是jdk在代码层级实现的,juc包下的Lock显示锁,而提到Lock就不得不提一下它的核心队列 ...

  5. Java Lock接口分析之ReentantReadWriteLock

    2019独角兽企业重金招聘Python工程师标准>>> ReentantReadWriteLock读写锁,在读线程多余写线程的并发环境中能体现出优异的性能,相比于synchroniz ...

  6. AbstractQueuedSynchronizer原理分析

    AQS是JUC锁框架中最重要的类,通过它来实现独占锁和共享锁的.本章是对AbstractQueuedSynchronizer源码的完全解析,分为四个部分介绍: CLH队列即同步队列:储存着所有等待锁的 ...

  7. 死磕 java同步系列之ReentrantReadWriteLock源码解析

    问题 (1)读写锁是什么? (2)读写锁具有哪些特性? (3)ReentrantReadWriteLock是怎么实现读写锁的? (4)如何使用ReentrantReadWriteLock实现高效安全的 ...

  8. AQS分析(AbstractQueuedSynchronizer)(三)

    1.AQS是什么 AQS同步器是Java并发编程的基础,从资源共享的角度分成独占和共享两种模式,像ReentrantLock.ThreadPoolExecutor.CountDownLatch等都是基 ...

  9. JUC之CountDownLatch的源码和使用场景分析

    最近工作不饱和,写写文章充充电.何以解忧,唯有Coding.后续更新的文章涉及的方向有:ThreadPoolExecutor.Spring.MyBatis.ReentrantLock.CyclicBa ...

最新文章

  1. plsql设置字段可为空_2015最新整理PLSQL常用设置
  2. 邻接表终极解析===和vector写法的区别
  3. 深入浅出MongoDB(二)概述
  4. 豆瓣9.3的纪录片《西南联大》告诉你:大学学风应如是!
  5. pagehelper插件oracle,带你学习最简单的分页插件PageHelper
  6. 使用tcl文件分配管脚
  7. matlab设置ylabel,关于ylabel设置的问题
  8. 架构师:成为架构师可能会面临的问题
  9. 印刷电路板(PCB)基础
  10. 机械设计二级减速器设计
  11. 【工具使用】无法登陆bing搜索引擎
  12. Android 去掉Power键屏保功能,但保留长按关机功能。
  13. 《一个程序员的奋斗史》读后感:从码农谈起
  14. 刷屏!日本内政部向国民宣传5G的短视频:未来将是这样!
  15. FSA-Net: Learning Fine-Grained Structure Aggregation for Head Pose Estimation from a Single Image
  16. 计算机显示器不亮灯,电脑液晶显示器指示灯不亮是为什么?
  17. 嵌入式Linux基础教程-读书笔记
  18. STC单片机蓝牙无线下载-烧写程序ISP(STC8 STC15 STC12 STC11 STC89)
  19. 小米3基于android,小米手机3评测 最大最快的小米3详细评测图文介绍
  20. pr文字转语音有插件吗_3种方法,免费让你的文字变成语音!

热门文章

  1. Installshield x:实现序列号检验,获取用户信息并写入指定_ini文件1 - 子夜 MySpace聚友博客...
  2. UOJ #579. 树上的颜色
  3. Docker安装mysql8
  4. 各种快速幂(qaq)
  5. JS - 讨论 - 编码习惯 - JavaScript代码到底要不要写分号?
  6. 分布式锁-常用技术方案
  7. 安装完成后在命令行运行bash时报错0x80070057
  8. django学习(1)-----项目组成
  9. 在Ubuntu 16.04下安装Matlab 2017a
  10. 使用dbunit和system-rules测试代码