JDK内置并发AQS同步器的独占锁获取与释放
作者简介:笔名seaboat,擅长工程算法、人工智能算法、自然语言处理、计算机视觉、架构、分布式、高并发、大数据和搜索引擎等方面的技术,大多数编程语言都会使用,但更擅长Java、Python和C++。平时喜欢看书写作、运动、画画。崇尚技术自由,崇尚思想自由。出版书籍:《Tomcat内核设计剖析》、《图解数据结构与算法》、《图解Java并发原理》、《人工智能原理科普》。
前言
前面我们介绍过JDK内置AQS同步器的相关内容,包括它的内部结构、性质及思想等等。详细分析了锁的获取与释放的逻辑、等待队列的管理、同步状态的管理、锁获取操作的中断支持、锁获取操作的超时与取消。其中各类操作处理逻辑主要使用了伪代码进行说明,接着的两篇文章将以代码的角度完整地分析AQS同步器,即java.util.concurrent.locks.AbstractQueuedSynchronizer类,为了更方便清晰讲解代码,这里会将非核心代码剔除且合并某些方法,我们主要是理解核心逻辑。
由于文章太长,考虑到阅读体验,将其分为3~4篇。这是第二篇。
一些辅助方法
在分析核心方法之前我们先看一些辅助方法,因为核心方法会调用它们。getState方法和setState方法用于读写同步状态state,需要注意这里额外提供了compareAndSetState方法,它用于通过CAS方式修改state。compareAndSetTail方法提供CAS方式修改队列尾tail,setHead方法设置队列头,parkAndCheckInterrupt方法使当前线程进入等待状态,当它被唤醒后会判断当前线程是否被中断且清理中断标识。
JDK内置并发AQS同步器的独占锁获取与释放相关推荐
- jdk内置线程实例_EA问题的JDK14实例
jdk内置线程实例 Tagir Valeev最近发布了一条有关即将发布的Java JDK14版本的预览功能的推文: #Java14模式匹配将名称隐藏带入了更高的疯狂程度. 在这里,我为FLAG字段添加 ...
- Java虚拟机学习总结(3)——JDK内置工具(jps、jstack、jmap、jstat)使用详解
一.JDK内置工具 - javap 1. 介绍 java 反编译工具,主要用于根据Java字节码文件反汇编为Java源代码文件. 2.命令 javap <options> <clas ...
- JDK内置命令行工具
java命令行 序号 接口 java Java 应用的启动程序 javac JDK 内置的编译工具 javap 反编译 class 文件的工具 javadoc 根据 Java 代码和标准注释,自动生成 ...
- JDK 内置命令行工具:工欲善其事,必先利其器
很多情况下,JVM 运行环境中并没有趁手的工具,所以掌握基本的内置工具是一项基本功. JDK 自带的工具和程序可以分为 2 大类型: 开发工具 诊断分析工具 JDK 内置的开发工具 写过 Java 程 ...
- 6. JDK内置命令行工具
JDK自带的工具和程序分为2大类型: 开发工具 诊断分析工具 开发工具 工具 简介 java Java 应用的启动程序 javac JDK 内置的编译工具 javap 反编译 class 文件的工具 ...
- Log4j日志的简单替代:JDK内置log的简单封装
前段时间Log4j爆出严重漏洞,其实我一直都不太喜欢这个臃肿的框架. 下面代码对JDK内置的log简单地封装了一下.直接复制到项目即可用.更不需要maven. 使用方法看main函数. import ...
- join left 大数据_Java并发编程笔记-JDK内置并行执行框架Fork/Join
Fork/Join由来-分而治之思想 分而治之:对于一个比较复杂的任务,如果可以很自然地将其分解为多个子任务,这些子任务互相独立且与原问题性质相同,递归地处理这些子任务,然后将各个子任务的结果合并得到 ...
- JDK内置工具--jconsole
jconsole是一个JAVA GUI监视工具.它可以查看到内存.线程.类及CPU使用的一些情况. 直接在命令行输入jconsole,然后选择进程即可. 转载于:https://www.cnblogs ...
- 设计模式 -行为型模式_ 观察者模式Observer Pattern 之 JDK内置的实现
文章目录 概念 Code [主题] [观察者s] 观察者一 观察者二 [测试] 源码分析 java.util.Observable 目标类 java.util.Observer 观察者接口 notif ...
最新文章
- WCF RIA Service实体类中发复杂类型
- socket绑定指定网卡发包
- 在CentOS 7 上搭建LAMP
- LeeCode-------Letter Combinations of a Phone Number 解法
- 【转载】Java 性能优化之String
- 课设(房屋出租系统)
- 【python-opencv】灰度图和彩色图的互相转换
- 大数据会给我们带来什么影响?
- 动态规划 01背包问题
- 01路径规划问题的相关理论
- 用户留存分析的几种方法
- Workspaces can only be enabled in private projects.
- 打开网上邻居,点击“查看工作组计算机”,出现:“Workgroup无法访问,您...
- 计算机网络和办公室自动化设备管理,通讯、计算机信息(含互联网)及办公自动化设备的安全保密管理暂行规定...
- bugku{web writeup笔记}
- AVD Pixel_2_API_30 is already running. lf that is not the case, delete the files at
- js添加多marker 高德地图_高德地图点聚合--Marker多点聚合及多个marker点击事件
- 杭电2030java做法_杭电ACM2019java做法
- 浙江省招高校招生职业计算机技术学校,2021年浙江高校招生职业技能考试时间...
- 首测微信小商店开放组件
热门文章
- 校园网局域网组网方案剖析
- 提交表单后显示.asp源代码
- 部分代码_(python openCV)用71行代码实现获取人脸部分并存储功能
- mapper中查询语句 where 后条件全都可以为null的时候怎么办? 待解决
- RAMPS1.4 3d打印控制板接线与测试3
- IT男遭遇“铁老大”
- 分布式数据中心网络互联技术实现
- html radio读数据库 展示,html中 radio 怎样从SQL数据库中读出数据
- Windows Edge 浏览器的有关 URL 链接的复制粘贴
- 用 Pyecharts 可视化微信好友