一旦ThreadA被唤醒,代码又会继续回到doAcquireSharedInterruptibly中来执行。如果当前state满足=0的条件,则会执行setHeadAndPropagate方法

private void doAcquireSharedInterruptibly(int arg) throws InterruptedException { final Node node = addWaiter(Node.SHARED); boolean failed = true; try { for (;;) {//被唤醒的线程进入下一 次循环继续判断 final Node p = node.predecessor(); if (p == head) { int r = tryAcquireShared(arg); if (r >= 0) { setHeadAndPropagate(node, r); p.next = null; // 把当前节点移除aqs队列 failed = false; return; } } if (shouldParkAfterFailedAcquire(p, node) && parkAndCheckInterrupt()) throw new InterruptedException(); } } finally { if (failed) cancelAcquire(node); }
}

doAcquireSharedInterruptibly相关推荐

  1. 用“逐步排除”的方法定位Java服务线上“系统性”故障

    说明:原文地址已经不可访问,其他地方有转载,不过很多丢失图片,所以,找到一处有图的重新配好图. 用"逐步排除"的方法定位Java服务线上"系统性"故障 Post ...

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

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

  3. Java并发同步器AQS

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

  4. Java并发编程-CountDownLatch

    2019独角兽企业重金招聘Python工程师标准>>> 1. 应用场景 CountDownLatch是并发包中用来控制一个或者多个线程等待其他线程完成操作的并发工具类.现以工作中的一 ...

  5. 深入理解Semaphore

    使用 Semaphore是计数信号量.Semaphore管理一系列许可证.每个acquire方法阻塞,直到有一个许可证可以获得然后拿走一个许可证:每个release方法增加一个许可证,这可能会释放一个 ...

  6. AQS分析(AbstractQueuedSynchronizer)(三)

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

  7. Android SharedPreferences 详解 源码解析

    1.实现类 SharedPreferences 只是一个接口,其实现类是SharedPreferencesImpl. 工作流程分析: 创建sp 的时候,会去查看是否有bak文件,如果有的话,把bak文 ...

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

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

  9. 记一次 Spring Boot 项目启动卡住问题排查记录

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 陈凯玲 来源 | https://url.cn ...

最新文章

  1. jmeter固定定时器使用与思考
  2. 网易云基于Prometheus的微服务监控实践
  3. Silverlight之工具箱使用1
  4. 自动生成考勤表_可自动变色的考勤表,逢周末自动更新,你会制作吗?
  5. python函数参数传递机制_Python 学习笔记(一) 理解Python的函数传参机制
  6. 无尽包围html5游戏在线玩,小团体激发潜能小游戏突破自我
  7. c语言读入图片matlab,将数据从matlab文件读入C语言
  8. 使用缓冲字符流BufferedReader和文件字符流FileReader读取文本文件
  9. PHP 23种设计模式
  10. Redis 官方推出可视化工具,颜值爆表,功能真心强大!这是不给其他工具活路啊!...
  11. 为你的企业建立竞争情报系统 (转)
  12. Mac屏幕分辨率如何更改?
  13. 计算机上显示找不到无线网络连接失败,笔记本找不到无线网络,教您笔记本电脑搜索不到无线网络怎么办...
  14. 移动端轮播图——网易云音乐手机端样式
  15. 3万字通俗易懂告诉你什么是.NET?什么是.NET Framework?什么是.NET Core?
  16. 【安信可NB-IoT模组EC系列AT指令应用笔记④】将设备位置接入阿里云地图,实现空间数据可视化
  17. I219-V 14代 win7x64驱动程序
  18. 一个月薪12000的北京程序员的真实生活
  19. 高级程序员如何面对职场压力 1 --老板是猪头
  20. J2EE是什么?和JavaEE的是什么关系?

热门文章

  1. CustomValidator的使用方法
  2. python操作数据库 封装类
  3. 数字图像基础,分辨率
  4. 疯狂ios讲义之使用路径
  5. 沃尔玛尝到了推行InnerSource的甜头
  6. 转载-extern “C”用法分析
  7. rgba的兼容性 IE
  8. 01-Windows Server 2012 R2 远程桌面服务部署指南
  9. OpenDNS,独特的免费DNS
  10. navigator对象介绍