- 持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第18天,点击查看活动详情
Lock所在位置
都知道lock是java轻量级的锁,我们首先看一下lock的所在包位置,源码里Lock的package为
java.util.concurrent.locks
Lock所在在JUC下的包内,同级目录locks下还有如下类
其他类我们先不管,我们先看Lock接口
Lock类图
lock的类图只有它这一个接口,没有其他继承跟实现的关系,说明这是一个顶级接口,从上往下走更方便我们熟悉整个locks内容下的规则跟实现
Lock的方法
在源码内查看Lock这个顶级接口定义了哪些方法来规定了整个锁机制的大框架
Lock接口内定义了6个方法,简单介绍各项作用:
-
lock:获取锁。如果锁不可用,则当前线程将被禁用以用于线程调度目的并处于休眠状态,直到获得锁为止。实现注意事项 Lock 实现可能能够检测到锁的错误使用,例如会导致死锁的调用,并且在这种情况下可能会抛出(未经检查的)异常。该锁实现必须记录情况和异常类型。
-
lockInterruptibly:允许在等待时由其它线程调用等待线程的Thread.interrupt方法来中断等待线程的等待而直接返回,这时不用获取锁,而会抛出一个InterruptedException。
-
tryLock:仅当调用时它是空闲的时才获取锁。如果锁可用,则获取锁,并立即返回值为 true。如果锁不可用,则此方法将立即返回值为 false。
-
tryLock(long time, TimeUnit unit):如果在给定的等待时间内空闲并且当前线程没有被中断,则获取锁。如果锁可用,则此方法立即返回值 true。如果锁不可用,则当前线程将被禁用以用于线程调度目的并处于休眠状态,直到发生以下三种情况之一:
- 锁被当前线程获取;
- 其他一些线程中断当前线程,支持中断获取锁
- 指定的等待时间已过
-
unlock:释放锁。实现注意事项 Lock 实现通常会限制哪个线程可以释放锁(通常只有锁的持有者可以释放它),如果违反限制,可能会抛出(未经检查的)异常。该 Lock 实现必须记录任何限制和异常类型。
-
newCondition:返回绑定到此 Lock 实例的新 Condition 实例。在等待条件之前,锁必须由当前线程持有。调用 Condition.await() 将在等待之前自动释放锁,并在等待返回之前重新获取锁。
Lock的实现类
一下就是之间实现Lock接口的实现类