本文最后更新于:2020年9月18日 下午

Java并发系列(十七)-队列同步器AQS(一)

本篇主要从以下内容展开:

  • 1、AQS是什么?
  • 2、AQS内部原理
  • 3、AQS的使用方式
  • 4、AQS定义的内容
  • 5、AQS同步状态分类
  • 6、锁和AQS的关系
  • 7、AQS的执行过程
  • 8、AQS提供的模板方法分类
  • 9、AQS可重写的方法
  • 10、AQS提供的模板方法

1、AQS是什么?

AQS(AbstractQueuedSynchronizer)是用来构建锁或者其他同步组件的基础框架。

2、AQS内部原理

使用一个int变量来表示同步状态,通过内置FIFO队列来完成资源获取线程的排队工作。

3、AQS的使用方式

继承:

    子类通过继承同步器,并实现它的抽象方法来管理同步状态。

注意:

    1.要想在实现抽象方法的过程中,对同步状态的改变是安全的,
    需要使用同步器提供的3个方法:

        getState()、setState(int newState)、compareAndSetState(int expect,int update)

    2.子类推荐被定义为自定义同步组件的静态内部类, 同步器本身没有实现任何同步接口。

4、AQS定义的内容

定义了若干同步状态获取和释放的方法,来供自定义同步组件使用。

5、AQS同步状态分类

  • 独占式地获取同步状态

  • 共享式地获取同步状态

    目的:实现不同类型的同步组件

6、锁和AQS的关系

  • 锁的实现中聚合了同步器,利用同步器实现了锁的语义。
  • 锁是面向【使用者】的,它定义了使用者与锁交互的接口(比如允许两个线程并行访问),隐藏了实现细节。
  • 同步器面向【锁的实现者】,简化了锁的实现方式,屏蔽了同步状态管理、线程排队、等待与唤醒等底层操作。

7、AQS的执行过程

1.使用者继承同步器并重写指定方法

2.将同步器组合在自定义同步组件的实现中

3.调用同步器中的模板方法

4.模板方法会调用使用者重写的方法

8、AQS提供的模板方法分类

  • 独占式获取与释放同步状态
  • 共享式获取与释放同步状态
  • 查询同步队列中的等待线程情况

9、AQS可重写的方法

10、AQS提供的模板方法

注意:再次说明模板方法会调用使用者重写的方法。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!博客中转载文章会注明出处,若有版权问题,请及时与我联系!谢谢!

Java并发系列(十七)-队列同步器AQS(二) 上一篇
计算机网络系列(九)-应用层(五) 下一篇