作者简介:笔名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同步器的独占锁获取与释放相关推荐

  1. jdk内置线程实例_EA问题的JDK14实例

    jdk内置线程实例 Tagir Valeev最近发布了一条有关即将发布的Java JDK14版本的预览功能的推文: #Java14模式匹配将名称隐藏带入了更高的疯狂程度. 在这里,我为FLAG字段添加 ...

  2. Java虚拟机学习总结(3)——JDK内置工具(jps、jstack、jmap、jstat)使用详解

    一.JDK内置工具 - javap 1. 介绍 java 反编译工具,主要用于根据Java字节码文件反汇编为Java源代码文件. 2.命令 javap <options> <clas ...

  3. JDK内置命令行工具

    java命令行 序号 接口 java Java 应用的启动程序 javac JDK 内置的编译工具 javap 反编译 class 文件的工具 javadoc 根据 Java 代码和标准注释,自动生成 ...

  4. JDK 内置命令行工具:工欲善其事,必先利其器

    很多情况下,JVM 运行环境中并没有趁手的工具,所以掌握基本的内置工具是一项基本功. JDK 自带的工具和程序可以分为 2 大类型: 开发工具 诊断分析工具 JDK 内置的开发工具 写过 Java 程 ...

  5. 6. JDK内置命令行工具

    JDK自带的工具和程序分为2大类型: 开发工具 诊断分析工具 开发工具 工具 简介 java Java 应用的启动程序 javac JDK 内置的编译工具 javap 反编译 class 文件的工具 ...

  6. Log4j日志的简单替代:JDK内置log的简单封装

    前段时间Log4j爆出严重漏洞,其实我一直都不太喜欢这个臃肿的框架. 下面代码对JDK内置的log简单地封装了一下.直接复制到项目即可用.更不需要maven. 使用方法看main函数. import ...

  7. join left 大数据_Java并发编程笔记-JDK内置并行执行框架Fork/Join

    Fork/Join由来-分而治之思想 分而治之:对于一个比较复杂的任务,如果可以很自然地将其分解为多个子任务,这些子任务互相独立且与原问题性质相同,递归地处理这些子任务,然后将各个子任务的结果合并得到 ...

  8. JDK内置工具--jconsole

    jconsole是一个JAVA GUI监视工具.它可以查看到内存.线程.类及CPU使用的一些情况. 直接在命令行输入jconsole,然后选择进程即可. 转载于:https://www.cnblogs ...

  9. 设计模式 -行为型模式_ 观察者模式Observer Pattern 之 JDK内置的实现

    文章目录 概念 Code [主题] [观察者s] 观察者一 观察者二 [测试] 源码分析 java.util.Observable 目标类 java.util.Observer 观察者接口 notif ...

最新文章

  1. WCF RIA Service实体类中发复杂类型
  2. socket绑定指定网卡发包
  3. 在CentOS 7 上搭建LAMP
  4. LeeCode-------Letter Combinations of a Phone Number 解法
  5. 【转载】Java 性能优化之String
  6. 课设(房屋出租系统)
  7. 【python-opencv】灰度图和彩色图的互相转换
  8. 大数据会给我们带来什么影响?
  9. 动态规划 01背包问题
  10. 01路径规划问题的相关理论
  11. 用户留存分析的几种方法
  12. Workspaces can only be enabled in private projects.
  13. 打开网上邻居,点击“查看工作组计算机”,出现:“Workgroup无法访问,您...
  14. 计算机网络和办公室自动化设备管理,通讯、计算机信息(含互联网)及办公自动化设备的安全保密管理暂行规定...
  15. bugku{web writeup笔记}
  16. AVD Pixel_2_API_30 is already running. lf that is not the case, delete the files at
  17. js添加多marker 高德地图_高德地图点聚合--Marker多点聚合及多个marker点击事件
  18. 杭电2030java做法_杭电ACM2019java做法
  19. 浙江省招高校招生职业计算机技术学校,2021年浙江高校招生职业技能考试时间...
  20. 首测微信小商店开放组件

热门文章

  1. 校园网局域网组网方案剖析
  2. 提交表单后显示.asp源代码
  3. 部分代码_(python openCV)用71行代码实现获取人脸部分并存储功能
  4. mapper中查询语句 where 后条件全都可以为null的时候怎么办? 待解决
  5. RAMPS1.4 3d打印控制板接线与测试3
  6. IT男遭遇“铁老大”
  7. 分布式数据中心网络互联技术实现
  8. html radio读数据库 展示,html中 radio 怎样从SQL数据库中读出数据
  9. Windows Edge 浏览器的有关 URL 链接的复制粘贴
  10. 用 Pyecharts 可视化微信好友