
版本
JDK8(JDK1.8)
Lock接口源码重点
1.Lock实现提供了比使用synchronized方法和语句更广泛的锁操作。它们允许更灵活的结构,可能具有完全不同的属性,并且可能支持多个关联的Condition对象。
2.随着灵活性的提高,还需要承担更多的责任。由于没有synchronized块结构锁,因此方法和语句不会自动释放锁。在大多数情况下,应使用以下模式:
Lock l = ...;
l.lock();
try {
// 访问受此锁保护的资源
} finally {
l.unlock();
}
3.Lock接口定义了三种比较特别获取锁的方式
4.Lock 接口定义的部分方法
| 方法名 | 作用 |
|---|---|
| void lock() | 获得锁,没成功则使用该方法的线程阻塞,直到获取锁 |
| void lockInterruptibly() | 获得锁,没成功则使用该方法的线程阻塞,直到获取锁或其他线程对当前线程调用了Thread.interrupt()使该线程进入中断状态(可中断锁) |
| boolean tryLock() | 尝试获得锁,成功则获得锁并返回true,否则返回false(非阻塞锁) |
| boolean tryLock(long time, TimeUnit unit) | 在给定时间内尝试获得锁,成功则获得锁并返回true,超时返回false(超时锁) |
| void unlock() | 释放锁,通常只有获得锁的线程可以释放锁 |
Lock接口源码
package java.util.concurrent.locks;
import java.util.concurrent.TimeUnit;
public interface Lock {
void lock();
void lockInterruptibly() throws InterruptedException;
boolean tryLock();
boolean tryLock(long time, TimeUnit unit) throws InterruptedException;
void unlock();
Condition newCondition();
}