JUC之AQS

AbstractQueuedSynchronizer(AQS)

AQS是并发容器里的同步器,从jdk1.5开始引入了并发包,java.util.concurrent,提供了一个基于first in first out的队列,可以用于构建锁和其它同步机制的基础框架。

下面看下AQS这个类的底层结构,底层使用了双向链表,也可以把它看成是一个队列,其中sync queue就是同步队列,它是双向链表,包括head节点和tail节点,head节点主要用于后续的调度。还有一个condition queue,它不是必须的,是一个单向链表,只有当使用中需要用到condition的时候,才会用到这个队列,并且可能会有多个condition queue。

AQS的设计

  • 使用node实现fifo队列,可以用于构建锁或者其他的同步装置的基础框架
  • 利用了一个int类型表示状态
  • 使用方法是继承
  • 子类通过继承并通过实现它的方法管理其状态{acquire 和 release}
  • 可以同时实现排他锁和共享锁模式(独占,共享)

AQS常用同步组件

  1. CountDownLatch,详细参阅java并发之CountDownLatch
  2. Semaphore,详细参阅java并发之Semaphore
  3. CyclicBarrier,详细参阅java并发之CyclicBarrier
  4. ReentrantLock,详细参阅jjava并发之ReentrantLock学习理解
  5. Condition,
  6. FutureTask,详细参阅JUC组件扩展(一):FutureTask理解
  7. ForkJoin,详细参阅JUC组件扩展(二)-JAVA并行框架Fork/Join(一):简介和代码示例,JUC组件扩展(二)-JAVA并行框架Fork/Join(二):同步和异步,JUC组件扩展(二)-JAVA并行框架Fork/Join(三):在任务中抛出异常,JUC组件扩展(二)-JAVA并行框架Fork/Join(四):监控Fork/Join池
  8. BlockingQueue,详细参阅JUC组件扩展(三):BlockingQueue(阻塞队列)详解

更多目录:java并发包java.util.concurrent详解

原文地址:https://www.cnblogs.com/shamo89/p/10223827.html