你的位置:首页 > 软件开发 > Java > Java并发编程总结3——AQS、ReentrantLock、ReentrantReadWriteLock

Java并发编程总结3——AQS、ReentrantLock、ReentrantReadWriteLock

发布时间:2016-06-13 21:00:04
本文内容主要总结自《Java并发编程的艺术》第5章——Java中的锁。 一、AQSAbstractQueuedSynchronizer(简称AQS),队列同步器,是用来构建锁或者其他同步组建的基础框架。该类主要包括:1、模式,分为共享和 ...

Java并发编程总结3——AQS、ReentrantLock、ReentrantReadWriteLock

本文内容主要总结自《Java并发编程的艺术》第5章——Java中的锁。

 

一、AQS

AbstractQueuedSynchronizer(简称AQS),队列同步器,是用来构建锁或者其他同步组建的基础框架。该类主要包括:

1、模式,分为共享和独占。

2、volatile int state,用来表示锁的状态。

3、FIFO双向队列,用来维护等待获取锁的线程

AQS部分代码及说明如下:

public abstract class AbstractQueuedSynchronizer  extends AbstractOwnableSynchronizer  implements java.io.Serializable {  static final class Node {    /** 共享模式,表示可以多个线程获取锁,比如读写锁中的读锁 */    static final Node SHARED = new Node();    /** 独占模式,表示同一时刻只能一个线程获取锁,比如读写锁中的写锁 */    static final Node EXCLUSIVE = null;    volatile Node prev;    volatile Node next;    volatile Thread thread;  }  /** AQS类内部维护一个FIFO的双向队列,负责同步状态的管理,当前线程获取同步状态失败时,同步器会将当前线程以及等待状态等    构造成一个节点Node并加入同步队列;当同步状态释放时,会把首节点中线程唤醒,使其再次尝试同步状态 */  private transient volatile Node head;  private transient volatile Node tail;  /** 状态,主要用来确定lock是否已经被占用;在ReentrantLock中,state=0表示锁空闲,>0表示锁已被占用;可以自定义,改写tryAcquire(int acquires)等方法即可 */  private volatile int state;}

原标题:Java并发编程总结3——AQS、ReentrantLock、ReentrantReadWriteLock

关键词:JAVA

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。