慢慢熟悉 AQS

AQS 的用法:

  1. 以 CountDownLatch 为例:

    CountDownLatch , 闭锁,用于等待多个并发任务都完成后再执行其他任务。
    初始化 new CountDownLath(int count), 给闭锁的初始数目设为count, 当count 减为0 时,闭锁就打开了.

    提供两个方法:
    void countDown(), 将锁中的数目减一。
    void await(), 锁未开(count 不为0)则阻塞直至锁开,否则直接返回。

    CountDownLatch 的实现:
    CountDownLatch 中的 Sync
    实现了AQS 的两个方法 int tryAcquireShared(arg);
    boolean tryReleaseShared(int releases);
    CountDownLatch 调用了AQS 的 void acquireSharedInterruptibly(int arg);
    和 boolean releaseShared(int arg);

首先明确状态:

  1. AQS 中的 state 就是初始设置的count, 那么当count 为0 时,不需阻塞,相当于获取共享资源成功。当锁不到0时,相当于获取共享资源失败。
  2. 1 中的逻辑可以帮助实现await, 什么时候阻塞,什么时候方法返回。
  3. 对于每个调用 countDown 的线程,要保证只要count>0,都能将原来值减一。且count 为0时, 要唤醒阻塞队列的第一个线程。
posted @ 2020-11-07 18:30  宇德高辉  阅读(65)  评论(0编辑  收藏  举报