13. 显式锁:Lock接口

显式锁是自JDK1.5开始引入的排它锁

显式锁的使用

方法 注释
void lock() 获取锁
void lockInterruptibly() throws InterruptedException 获取锁,如果处于阻塞状态,可以中断
boolean tryLock() 尝试获取锁,如果能获取到锁,则返回true
boolean tryLock(long time, TimeUnit unit) throws InterruptedException 尝试获取锁,有超时时间,可以被中断
void unlock() 释放锁
Condition newCondition() 返回绑定到此Lock实例的新Condition实例
// 创建锁实例
public final Lock lock = ...;

// 申请锁
lock.lock();

try {

} catch(...) {

} finally { // 避免锁泄漏
  // 释放锁
  lock.unlock();
}
image.png

ReentrantLock(可重入锁)

ReentrantLock既支持公平锁,又支持非公平锁。

// 默认构造方法是非公平锁
public ReentrantLock() {
  sync = new NonfairSync();
}

// fair参数设置为true,则为公平锁,否自为非公平锁
public ReentrantLock(boolean fair) {
  sync = fair ? new FairSync() : new NonfairSync();
}
image.png

公平锁的开销比非公平锁的开销要大

你可能感兴趣的:(13. 显式锁:Lock接口)