美文网首页
初窥AbstractQueuedSynchronizer(未完待

初窥AbstractQueuedSynchronizer(未完待

作者: lhsjohn | 来源:发表于2019-06-24 22:59 被阅读0次
前言:AQS是J.U.C提供给我们的核心基础组件,可以用它来构建锁和其他装置的基础框架,今天并不是对AQS进行深入的分析,只是从大体上对它有一个初步的认识,更加详细的分析会在后面的文章中不定时更新。

首先看一下AQS中的主要的数据结构

AQS.png

简单概括一下AQS的几个特性

  • 使用Node实现FIFO队列,可以用于构建锁和其他装置的基础框架
  • 利用了一个int类型的变量state来表示状态,state的值为0的时候表示没有线程获取锁,1的时候表示有线程获取锁,大于1的时候表示获得重入锁的数量
  • 使用它的方法是继承,基于模版方法设计,子类通过继承并通过实现它的方法管理其状态(acquire 和 release)
  • 可以同时实现拍他锁和共享锁模式(独占、共享),子类实现要么使用独占锁API要么使用共享锁API,站在使用者的角度来看不会同时使用两者。即便是最有名的子类ReentrantLock也是通过两个内部类读锁和写锁分别实现的两套API来实现的。

AQS实现的大体思路(重点)

首先AQS维护了一个CLH队列来管理锁,线程会尝试获取锁,如果失败了,就将当前线程以及等待状态等信息包成一个NODE节点,加入到同步队列SyncQueue中,之后会不断循环尝试获取锁,条件是当前节点为head的直接后继才会尝试,如果失败就会阻塞自己直到自己被唤醒,而当持有锁的线程释放锁的时候,才会释放队列中阻塞的线程。

AQS的同步组件(后面会对具体的组件进行详细分析)

  • CountDownLatch
  • Semaphore
  • CyclicBarrier
  • ReentrantLock
  • Condition组件
  • FutureTask组件

相关文章

  • 初窥AbstractQueuedSynchronizer(未完待

    前言:AQS是J.U.C提供给我们的核心基础组件,可以用它来构建锁和其他装置的基础框架,今天并不是对AQS进行深入...

  • AbstractQueuedSynchronizer(AQS)初

    一、 Concurrent包的实现原理: 由于Java的CAS同时具有volatile读和volatile写的内存...

  • 初窥

    初窥世界的美好 白的风 白的肌肤 和盈盈一握的腰肢 在你的头发里 有一个蓝色大海的梦 蓝的帆船和蓝的浪花 自然是美...

  • 初窥

    这个积分管理项目已经到收尾的阶段了,感受良多。 对于错误处理这方面这周我的规划也更为清楚一些了。明天如果能够预期结...

  • Material Design 初涉 (未完待更)

    Material Design, 是Google近两年推出的一种可视化设计语言,采用了卡片式材料设计,简洁优雅而有...

  • 初窥南京

    古鸡鸣寺门外,一条长满爬山虎的墙。 城墙下的绿植。 1912街区,没有什么能过阻挡,我对自由的向往。 午后墙壁上斑...

  • 初窥HTTP

    要知道HTTP肯定要先知道WWW,下面我用思维导图来介绍下: 1,弄懂了上图的关系,接下来着重介绍HTTP。 先介...

  • 初窥Scrapy

    Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。可以应用在包括数据挖掘,信息处理或存储历史数据...

  • mongodb初窥

    启动MongoDB服务:在 MongoDB 安装目录的 bin 目录下执行mongod show dbs -- 显...

  • RxSwift初窥

    前言 很久一段时间没写博客了,一方面是自己各种事情折腾,二是新项目开始用Swift了,边学边做忙死了,现在终于快忙...

网友评论

      本文标题:初窥AbstractQueuedSynchronizer(未完待

      本文链接:https://www.haomeiwen.com/subject/bloaqctx.html