目标: 大致介绍一下
java.util.concurrent.locks
包下的类, 接口 及其常用方法
1. 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
类提供了更多的方法;
-
构造方法
公平锁 与 非公平锁
公平锁 表示 线程获取锁的顺序是按照线程加锁的顺序来分配的, 即先来先得的FIFO先进先出顺序;
非公平锁 是 一种获取锁的抢占机制, 是随机获得锁的, 和公平锁不一样的就是先来的不一定先得到锁;
-
其他新增方法(9个)
3. Condition
接口
4. ReadWriteLock
接口 和 ReentrantLockReadWriteLock
类
- 读写锁表示也有两个锁, 一个是读操作相关的锁, 称为共享锁; 另一个是写操作相关的锁, 称为排他锁;
- 多个读锁之间不互斥, 读锁与写锁互斥, 写锁与写锁互斥
ReentrantReadWriteLock
类实现了ReadWriteLock
接口, 其api与ReentrantLock
类的api接口保持一致;