• 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提供了一个基础组件的功能.


  • 相关阅读:
    Fiddler抓包使用教程-会话图标
    Fiddler抓包使用教程-安装配置
    Fiddler抓包使用教程-扫盲篇
    Java web 开发填坑记 2 -如何正确的创建一个Java Web 项目
    Java Web 开发填坑记- 如何正确的下载 Eclipse
    Android 监听 WiFi 开关状态
    Android 获取系统语言(兼容7.0)
    Android 监听手机GPS打开状态
    Android Monkey的使用
    Android 开源库和项目 3
  • 原文地址:https://www.cnblogs.com/trekxu/p/9005441.html
Copyright © 2020-2023  润新知