AQS分层及自定义锁

之前写了一些锁使用文章,比如ReentrantLock(独占锁),ReentrantReadWriteLock(读写锁)等,也写了一些线程通讯类Condition(条件队列),CountDownLatch(倒计时器),CyclicBarrier(循环栅栏),Semaphore(信号量)等,底层都是使用AQS实现的。本篇文章主要记录AQS内部变量方法的使用及作用,还使用AQS实现了自定义锁的实现。比较简单,如需编写复杂的自定义锁也可以参考ReentrantLock(独占锁),ReentrantReadWriteLock(读写锁)。

阅读更多

CyclicBarrier使用

上一篇文章使用CountDownLatch模拟一家人出行旅行的计数器模型,也可以使用CyclicBarrier实现,CyclicBarrier翻译成英文为循环栅栏,CyclicBarrier的内部原理与CountDownLatch基本一样。不同地方在于CountDownLatch使用Node管理线程中断,而CyclicBarrier使用Condition队列。其实内部都一样。文章记录CyclicBarrier的使用过程以及其内部实现原理,供后续使用,复习,复盘等。

阅读更多

Semaphore使用

Semaphore是一个计数信号量,常用于限制可以访问某些资源(物理或逻辑的)线程数目。比如我们的接口只能同时有1000个连接访问,比如停车场只能停50辆车等等,Semaphore内部通过AQS实现公平锁和非公平锁。

阅读更多

CountDownLatch使用

项目开发中有一些需求,比如需要一些线程执行完成后再去执行一些操作。此时就需要用到CountDownLatch这个类,CountDownLatch是一个计数器,每当执行一个任务完成时调用计数器减一,直到count=0时才会执行后续的线程。CountDownLatch中的count不可重置。如果需要对count进行重置,官方建议使用CyclicBarrier,在后面的文章中会进行使用介绍。

阅读更多