java进阶-7-D -多线程-Lock专题- Lock接口
Lock接口
1.从关系图来看,这个Lock算是一个核心接口,非常多的地方实现了它
就这一眼看过去这几个方法已经把一个锁应该做的事情都列举出来了,可以通过声明Lock实例化对应的接口实现类,来达到面向对象的封装性。 不错
Lock的锁与Synchronized的相比 有几个特性 ---实现层面上不同 / Lock可以重入,synchronized是独占 / 只有Lock会造成活锁
简单的介绍一下Lock接口中各个方法的意图:
- void lock() ;
获取锁。如果锁定不可用,则当前线程将被禁用以进行线程调度,并且在获取锁定之前处于休眠状态。
实施注意事项
Lock实现可能能够检测到锁的错误使用,例如可能导致死锁的调用,并且可能在这种情况下抛出(未经检查的)异常。 必须通过Lock实现记录环境和异常类型。 - void lockInterruptibly() throws InterruptedException;
除非当前线程是已经加了 interrupt中断 标记,否则获取锁。 如果锁不可用,那么当前线程将被禁用以进行线程调度,并且在发生以下两种情况之一之前处于休眠状态: (1)锁定由当前线程获取; (2)其他一些线程Thread#interrupt中断当前线程,并支持锁定获取中断。 - boolean tryLock();
尝试获取锁,要是成功返回true ,失败就返回false - boolean tryLock(long time, TImeUnit unit) throws InterruptedException;
尝试在规定时间 time (unit) 内获取锁,成功返回true, 失败返回false - void unLock();
释放锁,该动作非常必要,一般都将该动作放在try/catch/finally 的finally中保证锁的安全释放 - Condition newCondition();
返回一个新的Condition对象,该对象简单来讲就是可以实现一个不同线程之间信号传递的作用,和wait/notify/notifyAll 功能比较接近
关于Lock的东西不多但是必须要牢记的