java线程之Lock的使用


目标: 大致介绍一下 java.util.concurrent.locks 包下的类, 接口 及其常用方法

1. Lock 接口
Lock接口

使用Lock接口的最佳模式:

public void method() throw InterruptedException {
    try {
        lock.lock(); // lock.lockUninterruptibly();
    } finally {
        lock.unlock();
    }
}

用户必须手动释放Lock锁(发生异常时不会自动释放Lock锁), 因为Lock锁并不是JVM原生支持的, 而是JDK提供的功能;

2. ReentrantLock 类(实现Lock接口的类)(互斥锁)

ReentrantLock是唯一实现了Lock接口的类,并且ReentrantLock类提供了更多的方法;

  • 构造方法


    ReetrantLock类的构造方法

公平锁非公平锁
公平锁 表示 线程获取锁的顺序是按照线程加锁的顺序来分配的, 即先来先得的FIFO先进先出顺序;
非公平锁 是 一种获取锁的抢占机制, 是随机获得锁的, 和公平锁不一样的就是先来的不一定先得到锁;

  • 其他新增方法(9个)


    ReentrantLock类的新增方法

    ReentrantLock类的新增方法
3. Condition 接口
Condition接口方法详解
4. ReadWriteLock 接口 和 ReentrantLockReadWriteLock
  • 读写锁表示也有两个锁, 一个是读操作相关的锁, 称为共享锁; 另一个是写操作相关的锁, 称为排他锁;
  • 多个读锁之间不互斥, 读锁与写锁互斥, 写锁与写锁互斥
ReadWriteLock接口

ReentrantReadWriteLock类实现了ReadWriteLock接口, 其api与ReentrantLock类的api接口保持一致;

你可能感兴趣的:(java线程之Lock的使用)