0
点赞
收藏
分享

微信扫一扫

4. AQS

AbrahamW 2022-04-13 阅读 32
java

1. AQS

1.1 CLH 队列锁

在这里插入图片描述

1.2 AbstractQueuedSynchronizer

队列同步器 AbstractQueuedSynchronizer(AQS),是用来构建锁或者其他同步组件的基础框架,它使用了一个 int 成员变量 state 表示同步状态(加锁状态),通过内置的 FIFO 队列来完成资源获取线程的排队工作。

AQS 是基于 CLH 的变种实现。

2. 显式锁

2.1 Lock 接口

在这里插入图片描述
标准使用范式是:解锁代码要放在 finally 中,确保业务代码出现异常时,可以解锁。在这里插入图片描述

2. 显式锁

  1. 可重入锁:加锁线程可再次对同一资源加锁。
    ReentrantLock 是可重入锁,synchronized 也是可重入锁。
  2. 公平锁、非公平锁:先抢锁线程先拿到锁是公平锁,否则为非公平锁。
    非公平锁效率更高。

2.1 ReentrantLock

2.2 读写锁:ReadWriteLock、ReentrantReadWriteLock

相对独占锁而言。
读写锁的排斥性:读读不排斥、读写排斥、写写排斥。

public class UseRwLock implements GoodsService {

    private final ReadWriteLock lock = new ReentrantReadWriteLock();
    private final Lock getLock = lock.readLock();//读锁
    private final Lock setLock = lock.writeLock();//写锁

    @Override
    public GoodsInfo getNum() {
        getLock.lock();
        try {
            SleepTools.ms(5);
            return null;
        } finally {
            getLock.unlock();
        }
    }

    @Override
    public void setNum(int number) {
        setLock.lock();
        try {
            SleepTools.ms(5);
        } finally {
            setLock.unlock();
        }
    }
}

2.3 Condition

在这里插入图片描述

    private Lock kmLock = new ReentrantLock();
    private Condition kmCond = kmLock.newCondition();
    private Lock siteLock = new ReentrantLock();
    private Condition siteCond = siteLock.newCondition();

2.4 LockSupport

举报

相关推荐

4. Hystrix

4.线程

4.查询二

4.数组dddd

4.检索数据

0 条评论