1. public interface Lock {
    2. /**
    3. * 获取锁的方法
    4. * 如果当前锁不可被获取,则线程会进入阻塞状态,直到获取
    5. * 这里应该考虑加锁等待锁过程中可能的错误情况
    6. */
    7. void lock();
    8. /**
    9. * 同样是获取锁的方法,但这个等待过程可以被打断
    10. * 如果当前线程被打断应该抛出一个InterruptedException
    11. */
    12. void lockInterruptibly() throws InterruptedException;
    13. /**
    14. * 尝试获取锁,获取失败也立即返回不等待
    15. */
    16. boolean tryLock();
    17. /**
    18. * 尝试获取锁,如果直到超过给定时间都没有获取到则返回
    19. * 如果获取过程中被中断则抛异常
    20. */
    21. boolean tryLock(long time, TimeUnit unit) throws InterruptedException;
    22. /**
    23. * 释放锁的方法 只有持有者可以释放,其他人释放可以抛出异常
    24. */
    25. void unlock();
    26. /**
    27. * 返回一个条件变量,对条件变量的等待/唤醒操作来操作指定线程
    28. */
    29. Condition newCondition();
    30. }

    Lock接口是定义了一些实现自定义锁的方法,后续我们自定义锁需要实现该接口中的方法。