自定义AQS独占模式下的同步器来实现独享锁 /** * 自定义AQS独占模式下的同步器来实现独享锁 */ public class Mutex implements Lock, java.io.Serializable { /** * 自定义AQS独占模式下的同步器 * 使用state为0表示当前锁没有被线程所持有 * 使用state为1表示当前锁已经被线程所持有 */ private static class Sync extends AbstractQueuedSynchronizer {…
首先我们从java.util.concurrent.locks包中的AbstraceQueuedSynchronizer说起,在下文中称为AQS. AQS是一个用于构建锁和同步器的框架.例如在并发包中的ReentrantLock.Semaphore.CountDownLatch.ReentrantReadWriteLock等都是基于AOS构建,这些锁都有一个特点,都不是直接扩展自AQS,而是都有一个内部类继承自AQS.为什么会这么设计而不是直接继承呢?简而言之,锁面向的是使用者,同步器面向的是线…
本文基于JDK-8u261源码分析 相信大部分人知道AQS是因为ReentrantLock,ReentrantLock的底层是使用AQS来实现的.还有一部分人知道共享锁(Semaphore/CountDownLatch/CyclicBarrier)也是由AQS来实现的.也就是说AQS中有独占和共享两种模式.但你以为这就是AQS的全部了吗?其实不然.AQS中还有第三种模式:条件队列.像Java中的阻塞队列(ArrayBlockingQueue.LinkedBlockingQueue等)就是由AQS…
1. MyAQS介绍    在这个系列博客中,我们会参考着jdk的AbstractQueuedLongSynchronizer,从零开始自己动手实现一个AQS(MyAQS).通过模仿,自己造轮子来学习主要有两个好处,一是可以从简单到复杂,从核心逻辑再到旁路逻辑的实现,学习曲线较为平滑:二是可以站在设计者的角度去思考实现具体功能时可以采用的各种方案的优劣,更深刻的理解其设计的精妙.关键之处. AQS支持互斥和共享这两种工作模式,其中互斥模式比共享模式要简单许多.本着由浅入深的原则,本篇博客实现的M…
关于AbstractQueuedSynchronizer JDK1.5之后引入了并发包java.util.concurrent,大大提高了Java程序的并发性能.关于java.util.concurrent包我总结如下: AbstractQueuedSynchronizer是并发类诸如ReentrantLock.CountDownLatch.Semphore的核心 CAS算法是AbstractQueuedSynchronizer的核心 可以说AbstractQueuedSynchronizer是…
在上一篇<Java并发系列[1]----AbstractQueuedSynchronizer源码分析之概要分析>中我们介绍了AbstractQueuedSynchronizer基本的一些概念,主要讲了AQS的排队区是怎样实现的,什么是独占模式和共享模式以及如何理解结点的等待状态.理解并掌握这些内容是后续阅读AQS源码的关键,所以建议读者先看完我的上一篇文章再回过头来看这篇就比较容易理解.在本篇中会介绍在独占模式下结点是怎样进入同步队列排队的,以及离开同步队列之前会进行哪些操作.AQS为在独占模…
关于AbstractQueuedSynchronizer JDK1.5之后引入了并发包java.util.concurrent,大大提高了Java程序的并发性能.关于java.util.concurrent包我总结如下: AbstractQueuedSynchronizer是并发类诸如ReentrantLock.CountDownLatch.Semphore的核心 CAS算法是AbstractQueuedSynchronizer的核心 可以说AbstractQueuedSynchronizer是…
关于AbstractQueuedSynchronizer JDK1.5之后引入了并发包java.util.concurrent,大大提高了Java程序的并发性能.关于java.util.concurrent包我总结如下: AbstractQueuedSynchronizer是并发类诸如ReentrantLock.CountDownLatch.Semphore的核心 CAS算法是AbstractQueuedSynchronizer的核心 可以说AbstractQueuedSynchronizer是…
一.序言 Lock接口是juc包下一个非常好用的锁,其方便和强大的功能让他成为synchronized的一个很好的替代品. 我们常用的一个Lock的实现类(好像也是唯一一个只实现了Lock接口的类) 当你查看源码时你会惊讶的发现ReentrantLock并没有多少代码,另外有一个很明显的特点是:基本上所有的方法的实现实际上都是调用了其静态内存类Sync中的方法,而Sync类继承了AbstractQueuedSynchronizer(AQS).可以看出要想理解ReentrantLock关键核心在于…
今天将开发好的ASP.NET站点部署到客户的服务器上后,发现了一个非常头疼的问题,那么就是IIS7的应用程序池是集成模式的话,ASP.NET项目中自定义的HttpModule会处理静态文件(.html .css .js .jpeg等)请求,而这不是我预期的效果,因为我只想让托管文件(aspx, ascx 及 MVC等)的请求被自定义HttpModule处理,但是我发现在IIS7的集成模式下所有请求都会进入HttpModule被处理. 后来我尝试将IIS7站点下的应用程序池改为了经典模式,这样的话…