023 AQS--JUC的核心

一 . 概述

  在之前我们讨论过线程的高效的提升方式,在JUC之中提供了各种方式来提升并发的效果.

  其中大多数的并发容器,并发辅助类,队列等都使用了一个类,这个类就是AQS.

  可以这么说AQS完成了JUC的大部分底层实现.


二 .AQS的介绍

  AbstractQueuedSynchronizer(抽象的队列同步器).

  这个类依靠一个队列实现了一个同步器,通过这个同步器我们可以实现各种的线程同步工具,我们的JUC之中大量的使用了这个类.

  我们日常之中一般不会去使用这个类,但是了解一下这个类的作用还是十分有必要的.

  该类模拟的就是synchronized,反映的现实就是获取和释放,只是在不同的组件之中的含义不一致,AQS使用int值代表这个状态.

  我们看一下释放和获取的操作代码:

  

  我们看到核心就是根据状态进行线程到队列的操作,这也就是AQS的名称的由来.

基本的方式就是:

  [1]根据那个int判断状态

  [2]状态不允许阻塞线程并且加入到等待队列之中

  [3]获取成功移除队列的线程

我们看到AQS方式和synchronize的思想是一致的.


 

三 .AQS的高效

  AQS为什么高效呢? 原因就在与使用了CAS的方式,实际上是一种通过无锁来完成的性能提升.

  当然synchronized经过了偏向锁,轻量级自旋锁,重量级锁的分级之后性能也是不错的.

因此在JUC之中,大量的组件都使用了AQS完成了自己的实现,因此AQS提供了一个基础组件的功能.


 

posted @ 2018-05-07 22:36  最爱五仁月饼  阅读(228)  评论(0编辑  收藏  举报