Java中关于ConditionObject的signal()方法的分析

news2024/11/25 20:42:43

代码块的展示

  • isHeldExclusively()这个仅持有锁资源的方法,在ReentrantLock中重写进行判断,要是没有持有锁资源那么会返回false,就会出现直接抛异常IllegalMonitorStateException(非法监视器状态异常)
  • 获取排在ConditionObject中单向队列首位的节点线程
  • 最后便是执行doSignal(first)这个方法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

doSignal(first)方法分析

  • 通过do while循环实现先执行再判断
  • 获取当前第一个节点的下一个节点,并将该节点置为第一个节点。要是该节点为null,尾巴节点也为null,便于脱离Condition队列说明队列中空空了。
  • 执行判断,要是前一个条件为true,则直接退出循环。否则再判断后续是否还有节点,有的话则会继续唤醒

在这里插入图片描述

transferForSignal(first)方法的分析

  • 该方法时唤醒再Condition中排队的线程
  • 通过CAS的方式将状态值由原先的-2修改为0,表示线程被唤醒,要是修改失败则返回false,就会回到上面这个图中执行后续的(first = firstWaiter) != null)判断
  • 要是CAS设置成功(改为0),则会将当前节点放到AQS队列并返回上一个节点 Node p = enq(node);
  • 获取上一个节点的状态,要是大于0或者(存在优先级,前面的先)后续CAS设置取消失败就挂起该线程,要是判断中第一个条件命中,说明线程已经被取消,赶紧唤醒当前线程。要是第一个判断条件没有命中,第二个CAS失败了,依然要唤醒当前线程。

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/598932.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

zookeeper相关,安装,认识......

目录 Zookeeper 1 第一章 Zookeeper简介... 1 1.1 Zookeeper概述和功能... 1 1.2 Zookeper安装... 1 1.3 Zookeper数据模型... 3 第二章 Zookeeper命令操作... 4 1.1 Zookeeper Client 4 1.2 Zookeeper JavaClient 6 第三章 集群角色... 28 Zookeeper 第一章 Zookeepe…

详解Servlet API

目录 前言 HttpServlet HttpServletRequest 代码实例 打印请求信息 通过URL中的queryString进行传递。 通过post请求的body,使用form表单传递 通过POST 请求中的 body 按照 JSON 的格式进行传递 HttpServletResponse 核心方法代码实例 设置状态码 自动刷…

【C++初阶】string 类的认识与学习

在学习string类之前,先在这里推荐2个好用的网站,可以用来查阅C的相关知识 https://cplusplus.com https://en.cppreference.com/w/ 上面的是非官方的,下面的官方的,但是个人感觉还是上面的好用。 一.string 类是什么 简单来说&…

State of GPT (ChatGPT 原理及现状介绍)

State of GPT 演讲信息: 演讲人:Andrej Karpathy (现在OpenAI任职),之前是特斯拉视觉研发负责人,斯坦福深度学习入门课程 CS231N 讲师演讲主题:受到微软 BUILD2023 邀请,介绍 GPT 的原理及研发现状&#x…

VMware虚拟机安装Ubuntu 22.04详细教程(2023年新版教程)

VMware虚拟机安装Ubuntu 22.04详细教程(保姆级教程) 大家好,我是洲洲,欢迎关注,一个爱听周杰伦的程序员。关注公众号【程序员洲洲】即可获得10G学习资料、面试笔记、大厂独家学习体系路线等…还可以加入技术交流群欢…

代码创作世界——pytorch深度学习框架数据类型

代码创作世界——pytorch深度学习框架数据类型 torch中的数据类型张量(tensor) pytorch中的 在数学中,一个单独的数可以成为标量,一行或者一列数组可以称为向量,一个二维数组称为一个矩阵,矩阵中的每一个元…

编译安装nginx服务

目录 编译安装nginx服务 1.关闭防火墙,将安装nginx所需软件包传到/opt目录下 2.安装依赖包 3.创建运行用户、组(Nginx服务程序默认以nobody身份运行,建议为其创建专门的用户账号,以便更准确的控制访问权限) 4.编译…

11.PasswordEncoder详解与实战

security/day07 这节课我们开始讲PasswordEncoder,如果大家还有印象的话,我们前面有提到过PasswordEncoder: 为什么密码使用{noop}开头呢?我们也做出了相应的解释,这节课开始带大家真正的了解PasswordEncoder, PassworderEncoder…

Android以aar包形式引入hunter-timing,Java(4)

Android以aar包形式引入hunter-timing,Java(4) (1)参照这篇文章: https://zhangphil.blog.csdn.net/article/details/130603231https://zhangphil.blog.csdn.net/article/details/130603231 生成.aar文件…

路径规划算法:基于象群优化的路径规划算法- 附代码

路径规划算法:基于象群优化的路径规划算法- 附代码 文章目录 路径规划算法:基于象群优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要:本文主要介绍利用智能优化算法象群…

python基础知识(六):列表

目录 1. 列表及其创建2. 列表的特点3. 获取指定元素的索引4. 获取列表中指定索引的元素5. 列表的切片操作6. 列表元素的判断及遍历7. 列表元素的添加操作8. 列表的删除9. 列表元素的修改10. 列表元素的排序11. 列表生成式 1. 列表及其创建 列表由一系列按特定顺序排列的元素组…

如何设计一份优秀的 PPT 文档?

设计一份优秀的 PPT 需要考虑以下几个方面: 目标和受众:明确你的 PPT 的目标是什么,以及你的受众是谁。这将帮助你确定内容的重点和风格。结构和流程:确定清晰的结构和流程,使你的 PPT 有逻辑性。使用标题、副标题和分…

算法与数据结构(三)——排序算法大总结

六大排序算法:插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序 一、插入排序二、选择排序三、冒泡排序四、归并排序 一、插入排序 1.从第一个元素开始,该元素可以认为已经被排序 2.取下一个元素tem,从已排序的元素序列从后往前扫…

三、DMSP/OLS、NPP/VIIRS等夜间灯光数据能源碳排放空间化——灯光指数计算(二)

一、前言 续上一节,建成区提取方式有很多种,本文主要介绍一种区别于参考比较法、突变检测法等的领域分析提取建成区范围。 本文以广州市为例,基于领域分析提取2020年广州市建成区范围。 二、具体步骤 (1)加载数据并将广州市夜间灯光数据提取出来 (2)搜索"邻域…

【前端】Vue项目中 JSON 编辑器的使用

Vue项目中 JSON 编辑器的使用 一、背景描述二、vue-json-edit2.1 依赖安装2.2 示例代码2.3 效果图 三、vue-json-pretty3.1 依赖安装3.2 示例代码3.3 效果图 四、bin-code-editor4.1 依赖安装4.2 示例代码4.3 效果图 五、vue-json-views5.1 依赖安装5.2 示例代码5.3 效果图5.4 …

json库——jsoncpp

一、jsoncpp简介 JsonCpp是一个开源的C库,用于解析和生成JSON(JavaScript Object Notation)数据格式。JSON是一种轻量级的数据交换格式,广泛用于各种应用程序和网络服务中。 JsonCpp提供了简单和易用的API,可以方便地解…

C Primer Plus第十七章编程练习答案

学完C语言之后,我就去阅读《C Primer Plus》这本经典的C语言书籍,对每一章的编程练习题都做了相关的解答,仅仅代表着我个人的解答思路,如有错误,请各位大佬帮忙点出! 有些题目函数定义在书本存在&#xff…

路径规划算法:基于鸽群优化的路径规划算法- 附代码

路径规划算法:基于鸽群优化的路径规划算法- 附代码 文章目录 路径规划算法:基于鸽群优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要:本文主要介绍利用智能优化算法鸽群…

Python编程面试题及答案(20例)

以下是一些常见的Python编程面试题以及它们的答案: 1.解释Python中的 GIL(全局解释器锁)是什么,它对多线程编程有什么影响? 答案:GIL是Python解释器中的一个机制,它确保在任何给定时间只有一个…

超详细Redis入门教程——Redis 主从集群(上)

前言 本文小新为大家带来 Redis 主从集群 相关知识,具体内容包括主从集群搭建(包括:伪集群搭建与配置,分级管理,容灾冷处理),主从集群搭建(包括:主从复制原理&#xff0c…