Open Source, Open Future!
  menu
107 文章
ღゝ◡╹)ノ❤️

读写锁

简介

读写锁。

  • 内部持有读锁和写锁;

类图

image.png

字段

// 读锁
 private final ReentrantReadWriteLock.ReadLock readerLock;
// 写锁
private final ReentrantReadWriteLock.WriteLock writerLock;
// 同步器
final Sync sync;

构造函数

  • 默认创建非公平锁
    public ReentrantReadWriteLock() {
        this(false);
    }
  • 根据参数fair确定创建的锁是否公平;初始化读锁和写锁
    public ReentrantReadWriteLock(boolean fair) {
        sync = fair ? new FairSync() : new NonfairSync();
        readerLock = new ReadLock(this);
        writerLock = new WriteLock(this);
    }

内部类

// 同步器
abstract static class Sync extends AbstractQueuedSynchronizer
// 公平锁
static final class FairSync extends Sync
// 非公平锁
static final class NonfairSync extends Sync
// 读锁
public static class ReadLock implements Lock, java.io.Serializable
// 写锁
public static class WriteLock implements Lock, java.io.Serializable

主要 API

获取读锁

        public void lock() {
            sync.acquire(1);
        }

将获取锁(独占锁)的请求转发给AQS处理(抽象队列同步器 AQS

示例

测试

备注

使用JDK版本为1.8