private void unparkSuccessor(Node node) { int ws = node.waitStatus;//获得head节点的状态 if (ws < 0) compareAndSetWaitStatus(node, ws, 0);// 设置head节点状态为0 Node s = node.next;//得到head节点的下一个节点 if (s == null || s.waitStatus > 0) { //如果下一个节点为null或者status>0表示cancelled状态. //通过从尾部节点开始扫描,找到距离head最近的一个waitStatus<=0的节点 s = null; for (Node t = tail; t != null && t != node; t = t.prev) if (t.waitStatus <= 0) s = t; } if (s != null) //next节点不为空,直接唤醒这个线程即可 LockSupport.unpark(s.thread);
}

锁的释放流程-unparkSuccessor相关推荐

  1. 锁的释放流程-ReentrantLock.unlock

    如果这个时候ThreadA释放锁了,那么我们来看锁被释放后会产生什么效果 ReentrantLock.unlock 在unlock中,会调用release方法来释放锁 public final boo ...

  2. 锁的释放流程-ReentrantLock.tryRelease

    这个方法可以认为是一个设置锁状态的操作,通过将state状态减掉传入的参数值(参数是1),如果结果状态为0,就将排它锁的Owner设置为null,以使得其它的线程有机会进行执行. 在排它锁中,加锁的时 ...

  3. Linux内存管理 brk(),mmap()系统调用源码分析2:brk()的内存释放流程

    Linux brk(),mmap()系统调用源码分析 brk()的内存释放流程 荣涛 2021年4月30日 内核版本:linux-5.10.13 注释版代码:https://github.com/Rt ...

  4. 你真的知道Java同步锁何时释放?

    在测试java多线程中有关 "生产者和消费者" 这个经典问题的时候,写代码测试的时候,思考到一些问题(所以还是要动手,实践才能储真知啊), synchronize 同步锁何时释放, ...

  5. oracle通过什么命令释放锁,oracle检测锁,释放锁

    oracle检测锁,释放锁 检测锁: SELECT A.OWNER, A.OBJECT_NAME, B.XIDUSN, B.XIDSLOT, B.XIDSQN, B.SESSION_ID, B.ORA ...

  6. 常见DB2锁等待解决流程

    以下内容摘录自<DB2性能调整和优化>一书锁一章,如果转载务必指明出处! 锁等待是实际生产中最常碰到的性能问题,下面我们总结了锁等待问题的解决流程和步骤.现在的情况是一个应用系统中出现很多 ...

  7. P576线程P582多线程P583startP584Runnable创建线程P58子线程应用P587退出P588方法P591守护线程P592线程7大状态P593同步P594互斥锁P596释放锁P598

    576线程-P598作业2 P576线程 P582多线程机制 public class Thread01 {public static void main(String[] args) {//创建Ca ...

  8. 安卓设置锁屏密码流程

    本文以安卓5.1为例分析锁屏密码设置的流程. 由设置界面中设置密码可以看到以下文件. packages/apps/Settings/src/com/android/settings/ChooseLoc ...

  9. 异常与锁的释放(synchronized )

    http://wangxinchun.iteye.com/blog/1801057 synchronized 获取的锁,在方法抛出异常的时候会自动解锁 Java代码   package com.hor ...

最新文章

  1. 王道考研 计算机网络笔记 第五章:传输层
  2. Redis 6.0 新特性-多线程连环13问!
  3. linux pprof工具安装,google perftools工具介绍
  4. Python,yyds!
  5. 二叉树遍历(已知先序和中序)
  6. mysql增删改查 工具类_Hibernate增删改查数据库之二工具类
  7. IOS基础之绘图函数的使用
  8. 如何在ASP.NET Core程序启动时运行异步任务(3)
  9. sklearn——AdaBoost应用
  10. SpringBoot + ShardingSphere 秒级分库分表!
  11. 04737 c++ 自学考试2019版 第六章课后练习 程序设计题 1
  12. 在设计四人抢答器中灯全亮_数字电子技术课程设计报告(四人抢答器).doc
  13. (原)python爬虫入门(2)---排序爬取的辽宁科技大学热点新闻
  14. Color-UI 简介及使用教程
  15. 建设工程项目全寿命周期管理是指_建设工程全寿命周期的概述
  16. 需求与商业模式分析-6-五个课题
  17. qduoj 分辣条2
  18. 华为鸿蒙harmonyos-面向全场,华为鸿蒙 OS 下月发布?别做梦了……
  19. java catch 空指针异常_java空指针异常怎么处理
  20. 腾讯在乳腺癌影像AI诊断方向的探索

热门文章

  1. cdoj 秋实大哥搞算数
  2. HTMLCSS 第三天 笔记
  3. 兼容所有浏览器的CSS3圆角效果
  4. PHP提取中文首字母
  5. 大话设计模式—桥接模式
  6. 大话设计模式—适配器模式
  7. ORA-01810: 格式代码出现两次
  8. 【struts2】struts2实现自定义数据类型转换器
  9. 多线程断点续传下载软件-闪电下载2009
  10. Solr及Spring-Data-Solr入门学习