首页 > 编程语言 >Java 同步锁ReentrantLock与抽象同步队列AQS

Java 同步锁ReentrantLock与抽象同步队列AQS

时间:2022-11-21 11:32:57浏览次数:45  
标签:node Node 同步 Java AQS pred 获取 线程 节点

AbstractQueuedSynchronizer 抽象同步队列,它是个模板类提供了许多以锁相关的操作,常说的AQS指的就是它。AQS继承了​​AbstractOwnableSynchronizer​​类,AOS用于保存线程对象,保存什么线程对象呢?保存锁被独占的线程对象。抽象同步队列AQS除了实现序列化标记接口,并没有实现任何的同步接口,该类提供了许多同步状态获取和释放的方法给自定义同步器使用,如ReentrantLock的内部类Sync。抽象同步队列支持独占式或共享式的的获取同步状态,方便实现不同类型的自定义同步器。一般方法名带有​​Shared​​的为共享式,比如,尝试以共享式的获取锁的方法​​int tryAcquireShared(int)​​,而独占式获取锁方法为​​boolean tryAcquire(int)​​。AQS是抽象同步队列,其重点就是​​同步队列​​及​​如何操作同步队列​​。

同步队列

双向同步队列,采用尾插法新增节点,从头部的下一个节点获取操作节点,节点自旋获取同步锁,实现FIFO(先进先出)原则。

Java 同步锁ReentrantLock与抽象同步队列AQS_自旋锁

理解节点中的属性值作用

  • prev:前驱节点;即当前节点的前一个节点,之所以叫前驱节点,是因为前一个节点在使用完锁之后会解除后一个节点的阻塞状态;
  • next:后继节点;即当前节点的后一个节点,之所以叫后继节点,是因为“后继有人”了,表示有“下一代”节点承接这个独有的锁

    标签:node,Node,同步,Java,AQS,pred,获取,线程,节点
    From: https://blog.51cto.com/u_12039705/5873190

相关文章

  • Java 同步锁ReentrantLock与抽象同步队列AQS
    AbstractQueuedSynchronizer抽象同步队列,它是个模板类提供了许多以锁相关的操作,常说的AQS指的就是它。AQS继承了​​AbstractOwnableSynchronizer​​类,AOS用于保存线程对......
  • 【Java】JDK5.0新增的创建多线程的方式:实现Callable接口,使用线程池
    1.实现Callable接口方式和实现Runnable接口相比call()可以有返回值。call()可以抛出异常,被外面的操作捕获,获取异常信息。Callable是支持泛型的。实现Callable接口......
  • 5分钟搞定 SQL Server 到 MySQL 数据迁移和同步
    简述SQLServer是一个值得信赖的老牌数据库系统,自从1988年由Microsoft、Sybase和Ashton-Tate三家公司共同推出之后就一直不断迭代更新。而如今我们提到SQLServer......
  • Java工具库Guava本地缓存Cache的使用、回收、刷新、统计等示例
    场景Java核心工具库Guava介绍以及Optional和Preconditions使用进行非空和数据校验:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/127683387在上面引入Gua......
  • 轻松学会JavaScript事件
    文章目录​​事件与事件流​​​​事件监听(绑定事件方法)​​​​JavaScript事件​​​​鼠标事件​​​​表单事件​​​​键盘事件​​​​UI事件​​​​快速投票​​  ......
  • 阻塞、非阻塞与同步异步
    作者:萧萧链接:https://www.zhihu.com/question/19732473/answer/241673170来源:知乎IO概念区分四个相关概念:同步(Synchronous)异步(Asynchronous)阻塞(Blocking)......
  • Java集合
    集合集合类的特点:提供一种存储空间可变的存储模型,存储的数据容量可以随时发生改变。1.Collection(接口):单列集合 List(接口):元素可重复 ArrayList(实现类): Linke......
  • java常用类
    日期LocalDateTime时间格式化LocalDateTimetime=techLogicTablePo.getCreateTime();DateTimeFormatterdateTimeFormatter=DateTimeFormatter.ofPattern("yyyy-MM......
  • Java实现双向循环链表
    上一篇文章实现了单向循环链表,双向很简单,在单向循环链表的基础上加一个前驱指针,节点类如下:/***双向链表节点*/publicclassNode{privateintdata;//数据......
  • JavaScript基础快速复习
    目录学习信息01初识JavaScript浏览器执行JS过程JS的组成JS初体验JS的注释02JavaScript输入输出语句03变量变量概述变量的使用变量的语法扩展变量的命名规范04数......