023 AQS--JUC的核心

本文介绍了AbstractQueuedSynchronizer (AQS) 的工作原理及其在Java并发库(JUC)中的应用。AQS作为核心组件,通过队列管理线程同步,采用CAS操作提升性能。了解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提供了一个基础组件的功能.


 

转载于:https://www.cnblogs.com/trekxu/p/9005441.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值