public interface Lock {
/**
* 获取锁的方法
* 如果当前锁不可被获取,则线程会进入阻塞状态,直到获取
* 这里应该考虑加锁等待锁过程中可能的错误情况
*/
void lock();
/**
* 同样是获取锁的方法,但这个等待过程可以被打断
* 如果当前线程被打断应该抛出一个InterruptedException
*/
void lockInterruptibly() throws InterruptedException;
/**
* 尝试获取锁,获取失败也立即返回不等待
*/
boolean tryLock();
/**
* 尝试获取锁,如果直到超过给定时间都没有获取到则返回
* 如果获取过程中被中断则抛异常
*/
boolean tryLock(long time, TimeUnit unit) throws InterruptedException;
/**
* 释放锁的方法 只有持有者可以释放,其他人释放可以抛出异常
*/
void unlock();
/**
* 返回一个条件变量,对条件变量的等待/唤醒操作来操作指定线程
*/
Condition newCondition();
}
Lock接口是定义了一些实现自定义锁的方法,后续我们自定义锁需要实现该接口中的方法。