谈到java中的并发,我们就避不开线程之间的同步和协作问题,谈到线程同步和协作我们就不能不谈谈jdk中提供的AbstractQueuedSynchronizer(翻译过来就是抽象的队列同步器)机制; (一)、AQS中的state和Node含义: AQS中提供了一个intvolatilestate状态的变量用来标识共享资源,AQS定义了两种资源的占用方式: 1、独占模式(EXCLUSIVE):表示同一个资源,在同一时刻只能被一个线程持有,例如ReentrantLock等; 2、共享模式(SHARED):表示同一个资源,在同一时刻可以被多个线程同时持有,例如Semaphor
谈到java中的并发,我们就避不开线程之间的同步和协作问题,谈到线程同步和协作我们就不能不谈谈jdk中提供的AbstractQueuedSynchronizer(翻译过来就是抽象的队列同步器)机制; (一)、AQS中的state和Node含义: AQS中提供了一个intvolatilestate状态的变量用来标识共享资源,AQS定义了两种资源的占用方式: 1、独占模式(EXCLUSIVE):表示同一个资源,在同一时刻只能被一个线程持有,例如ReentrantLock等; 2、共享模式(SHARED):表示同一个资源,在同一时刻可以被多个线程同时持有,例如Semaphor
总所周知,javaconcurrent包的工具类是构建在AbstractQueuedSynchronizer类上的基础上的,而这个类是DougLea大神基于CHL队列实现的同步器。这个强大的同步器是怎样实现的呢?我们来一探究竟。因为AQS的代码比较难以理解,我们从concurrent包下的并发工具类着手开始研究。从最简单的CountDownLatch开始,首先看它的源码publicclassCountDownLatch{/***SynchronizationcontrolForCountDownLatch.*UsesAQSstatetorepresentcount.*/privatestati
总所周知,javaconcurrent包的工具类是构建在AbstractQueuedSynchronizer类上的基础上的,而这个类是DougLea大神基于CHL队列实现的同步器。这个强大的同步器是怎样实现的呢?我们来一探究竟。因为AQS的代码比较难以理解,我们从concurrent包下的并发工具类着手开始研究。从最简单的CountDownLatch开始,首先看它的源码publicclassCountDownLatch{/***SynchronizationcontrolForCountDownLatch.*UsesAQSstatetorepresentcount.*/privatestati