0%

AQS相关重点

2018年7月8日 下午3:53

  1. 慕课网实战·高并发探索(十一):并发容器J.U.C — AQS组件CountDownLatch、Semaphore、CyclicBarrier - CSDN博客

  2. 慕课网实战·高并发探索(十二):并发容器J.U.C — AQS组件 锁:ReentrantLock、ReentrantReadWriteLock、StempedLock - CSDN博客

  3. AQS?

    1. AQS全名:AbstractQueuedSynchronizer,是并发容器J.U.C(java.lang.concurrent)下locks包内的一个类。它实现了一个FIFO(FirstIn、FisrtOut先进先出)的队列。底层实现的数据结构是一个双向链表。
    2. Sync queue:同步队列,是一个双向链表。包括head节点和tail节点。head节点主要用作后续的调度。
    3. Condition queue:非必须,单向列表。当程序中存在cindition的时候才会存在此列表。
  4. AQS的大致实现思路?

    1. AQS内部维护了一个CLH队列来管理锁。线程会首先尝试获取锁如果失败就将当前线程及等待状态等信息包装成一个node节点加入到同步队列sync queue里。
    2. 接着会不断的循环尝试获取锁条件是当前节点为head的直接后继才会尝试。如果失败就会阻塞自己直到自己被唤醒。而当持有锁的线程释放锁的时候,会唤醒队列中的后继线程。
  5. CountDownLatch, CyclicBarrier都可以用一个情节理解

    1. 当我们遇到计算量超大的数据时,我们可以让多个线程分别执行其中一部分的值,当各个线程都执行完之后,我们把各个线程的最后结果进行相加,从而得到最后的效果
    2. CountDownLatch,CyclicBarrier两种的代码写法可能不同,但是作用是类似的。
  6. CountDownLatch, CyclicBarrier的不同?

    1. 计数器可重复用
    2. 描述一个或多个线程等待其他线程的关系/多个线程相互等待
  7. ReentrantLock和Condition就用这个情节理解

  8. 票据锁:StempedLock看这个就行。

    1. 读写锁和乐观读+ StampedLock放在一起理解