13. 显式锁:Lock接口

2018-12-11  本文已影响0人  TheMrBigHead

显式锁是自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

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

上一篇 下一篇

猜你喜欢

热点阅读