JUC并发编程第十二章——AQS

1 前置知识

  • 公平锁和非公平锁
    • 公平锁:锁被释放以后,先申请的线程先得到锁。性能较差一些,因为公平锁为了保证时间上的绝对顺序,上下文切换更频繁
    • 非公平锁:锁被释放以后,后申请的线程可能会先获取到锁,是随机或者按照其他优先级排序的。性能更好,但可能会导致某些线程永远无法获取到锁
  • 可重入锁
    • 也叫做递归锁,指的是线程可以再次获取自己的内部锁,比如一个线程获取到了对象锁,此时这个对象锁还没有释放,当其想再次获取这个对象锁的时候还是可以获取的,如果不可重入的话,会导致死锁。
  • 自旋思想
    • 当线程请求锁时,如果锁已经被其他线程持有,那么该线程会不断地重试获取锁,而不是被挂起等待,这种不断尝试获取锁的行为称为自旋
  • LockSupport
    • 一个工具类,用于线程的阻塞和唤醒操作,类似于wait()和notify()方法,但是更加灵活和可控
    • 提供了park()和unpark()两个静态方法用于线程阻塞和唤醒操作。
    • 优点在于可以在任意时刻阻塞和唤醒线程而不需要事先获取锁或监视器对象。
  • 数据结构之双向链表
    • 双向链表(Doubly Linked List)是一种常见的数据结构,它是由一系列结点(Node)组成的,每个结点包含三个部分:数据域、前驱指针和后继指针。其中,数据域存储结点的数据,前驱指针指向前一个结点,后继指针指向后一个结点。通过这种方式,双向链表可以实现双向遍历和插入、删除操作。
  • 设计模式之模板设计模式
    • 模板设计模式是一种行为型设计模式,定义了一种算法的框架,并将某些步骤延迟到子类中事先,这种设计模式的主要目的是允许子类在不改变算法结构的情况下重新定义算法中的某些步骤。
    • 优点是能够提高代码复用性和可维护性。

 贴一个文章连接:一行一行源码分析清楚AbstractQueuedSynchronizer (javadoop.com)

2 AQS入门级别理论知识

2.1 是什么?

AQS:全称AbstractQueueSynchronizer,抽象的队列同步器

AQS(AbstractQueuedSynchronizer)是Java并发编程框架中的一个核心组件,位于java.util.concurrent.locks包下。它是构建锁和其他同步器组件(如Semaphore、CountDownLatch、ReentrantLock等)的基础框架类。AQS的设计目标是为实现依赖于先进先出(FIFO)等待队列的阻塞式锁和相关同步器提供一个高度可复用的框架

技术解释

  • 是用来实现锁或者其他同步器组件的公共基础部分的抽象实现
  • 是重量级基础框架及整个JUC体系的基石主要用于解决锁分配给“谁”的问题
  • 整体就是一个抽象的FIFO队列(先进先出的等待队列)来完成资源获取线程的排队工作,并通过一个int类变量表示持有锁的状态

2.2 AQS为什么是JUC内容中最重要的基石

和AQS有关的类:

  • java.util.concurrent.locks.ReentrantLock
  • java.util.concurrent.CountDownLatch
  • java.util.concurrent.locks.ReentrantReadWriteLock
  • java.util.concurrent.Semaphore

这些并发编程中常用的类,底层实现基本上都和AQS有关

ReentrantLock

CountDownLatch

ReentrantReadWriteLock

Semaphore

..............

可以看到以上类的内部都有一个继承了AQS的抽象类Sync。

进一步理解锁和同步器的关系

  • 锁,面向锁的使用者:定义了程序员和锁交互的使用层API,隐藏了实现细节,程序员调用即可实现功能
  • 同步器,面向锁的实现者:Java并发大神DoungLee,提出了统一规范并简化了锁的实现,将其抽象出来
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值