首页 > 其他分享 >锁-AQS篇

锁-AQS篇

时间:2023-12-05 22:45:10浏览次数:28  
标签:AQS ReentrantReadWriteLock 实现 ReentrantLock 模式 线程

概念:

AQS是一种比较经典的模板方法模式的JDK应用

AQS其实就是一个可以给我们实现锁的框架

内部实现的关键是:

  • 先进先出的队列、state状态
  • 定义了内部类ConditionObject

拥有两种线程模式:

  • 独占模式
  • 共享模式

相关锁:

  • 在LOCK包中的相关锁(常用的有ReentrantLock、 ReadWriteLock)都是基于AQS来构建
  • AQS是ReentrantReadWriteLock和ReentrantLock的基础,因为默认的实现都是在内部类Syn中,而Syn是继承AQS的
  • ReentrantReadWriteLock和ReentrantLock都支持公平和非公平模式,公平模式下会去看FIFO队列线程是否是在队头,而非公平模式下是没有的
  • ReentrantReadWriteLock是一个读写锁,如果读的线程比写的线程要多很多的话,那可以考虑使用它。它使用state的变量高16位是读锁,低16位是写锁
  • 一般我们叫AQS为同步器

总结

  • juc包中很多可阻塞的类都是基于AQS构建的
  • AQS可以说是一个给予实现同步锁、同步器的一个框架,很多实现类都在它的的基础上构建的
  • 在AQS中实现了对等待队列的默认实现,子类只要重写部分的代码即可实现(大量用到了模板代码)

标签:AQS,ReentrantReadWriteLock,实现,ReentrantLock,模式,线程
From: https://www.cnblogs.com/nxjblog/p/17878497.html

相关文章

  • AQS
    AQSAQS抽象队列同步器AQS利用一个FIFO双向队列(CLH队列的变体)来完成线程同步状态的管理,同步队列的节点包括以下属性(AQS的内部类):waitStatus的状态:CANCELLED1表示线程获取锁的请求已经取消了SIGNAL-1表示线程已经准备好了,就等资源释放了CONDITION-2表示节点在等待队列......
  • 并发之AQS源码学习
    /****学习AbstractQueuedSynchronizer**1.state是aqs的重要属性,说明锁的使用次数*2.CustomAbstractQueuedSynchronizer,存在head与tail属性,所以其本身就是一个链表。并没有使用集合*3.双向链表(等待队列)*1.head永远都是伪节点(thead=null)*......
  • AQS源码分析-Condition
    在生产者消费者模型这篇文章中我们使用了ReentrantLock结合Condition实现生产者消费者模型,但我们对于ReentrantLock和Condition的工作原理并不了解,其内部的结构和源码级别实现就更加不了解了。比如在使用await方法的时候,为什么一定要用while判断条件,用if为什么不行呢?使用Condition......
  • AQS是什么?AbstractQueuedSynchronizer之AQS原理及源码深度分析
    文章目录一、AQS概述1、什么是AQS2、技术解释3、基本原理4、AQS为什么这么重要二、AQS数据结构1、AQS的结构2、ReentrantLock与AbstractQueuedSynchronizer3、AQS的state变量4、AQS的队列5、AQS的Node(1)Node的waitStatus(2)属性说明三、ReentrantLock的lock方法分析AQS源码1、类图2、......
  • aqs-shared
    上篇文章AQS源码分析-独占模式分析了AQS的结构以及独占模式下资源的获取与释放流程,啰嗦了AQS的基本结构和独占模式。这篇文章主要是探讨下AQS在共享模式下资源的获取与释放,同时比较下两种模式的差异(本文基于JDK11版本)。流程分析-获取资源这篇文章以CountDownLatch为例,和独占模......
  • aqs-exclusive
    我们在使用ReentrantLock进行加锁和释放锁时可能会有好奇,这种加锁释放锁的操作和synchronized有什么区别,所以就会去翻源码,一翻源码才发现这里面的知识别有洞天,因为涉及到并发编程最基础最难理解的部分,其中AbstractQueuedSynchronizer这个类是java.util.concurrent的核心,被称为AQS,......
  • 17-ReentrantLock和java中的aqs
    一、aqsAQS是AbstractQueuedSynchronizer的缩写,是一个用来构建锁和同步器的框架,是线程安全问题(原子性)的一种解决方案通过它可以实现很多不同类型的锁,例如ReentrantLock。主要内容:用state属性来表示资源的状态(分独占模式和共享模式),子类需要定义如何维护这个状态,控......
  • Java并发之AQS
    一、AQS是什么AbstractQueuedSynchronizer抽象同步队列,简称AQS,它是Java并发包的根基,并发包中的锁就是基于AQS实现的。AQS是基于一个FIFO的双向队列,其内部定义了一个节点类Node,Node节点内部的SHARED用来标记该线程是获取共享资源时被阻挂起后放入AQS队列的,EXCLUSIVE用来标记......
  • 并发_AQS
            ......
  • 探索抽象同步队列 AQS
    by emanjusakafrom https://www.emanjusaka.top/archives/8 彼岸花开可奈何本文欢迎分享与聚合,全文转载请留下原文地址。前言AbstractQueuedSynchronizer抽象同步队列简称AQS,它是实现同步器的基础组件,并发包中锁的底层就是使用AQS实现的。大多数开发者可能永远不会直接使......