显式锁是自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();
}
ReentrantLock(可重入锁)
ReentrantLock
既支持公平锁,又支持非公平锁。
// 默认构造方法是非公平锁
public ReentrantLock() {
sync = new NonfairSync();
}
// fair参数设置为true,则为公平锁,否自为非公平锁
public ReentrantLock(boolean fair) {
sync = fair ? new FairSync() : new NonfairSync();
}
公平锁的开销比非公平锁的开销要大