zoukankan      html  css  js  c++  java
  • 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提供了一个基础组件的功能.


  • 相关阅读:
    【HDU
    【HDU
    【AtCoder
    【POJ
    Apache、Nginx、IIS日志记录分析&详解
    在Windows Server 2008 R2上安装IIS
    SQL 注入漏洞研究
    利用Nginx实现反向代理web服务器(Linux+Nginx+Mysql+PHP)
    CentOS 7 LAMP搭建并且部署sqli-labs
    Kali 下配置Nessus-2020年3月新版
  • 原文地址:https://www.cnblogs.com/trekxu/p/9005441.html
Copyright © 2011-2022 走看看