Java 中的 Lock 接口

2025 年 9 月 4 日 | 阅读 4 分钟

Lock 接口是 Java 中最常用的接口之一。Lock 接口位于 Java.util.concurrent.locks 包中,我们将其用作线程同步机制,类似于 synchronized 块。与 synchronized 块相比,它更灵活,并提供了更多选项。

以下是 synchronized 块Lock 接口 之间的区别

参数LockSynchronized 块
保证顺序Lock 接口确保等待线程获得访问权的顺序。Synchronized 块不处理此问题。
无超时在未获得锁的情况下,它提供了超时选项。它不提供此类选项。
单个方法我们可以在不同的方法中调用 lock 的方法。它必须完全包含在单个方法中。

Lock 方法

Lock 接口提供了以下方法

1. lock() 方法

lock() 方法是最重要的方法之一,用于获取锁。当锁不可用时,当前线程将因线程调度目的而被禁用。

lock() 方法不返回任何值,其语法如下

2. lockInterruptibly() 方法

此方法用于获取锁,除非当前线程被中断。如果锁可用,它会立即获取并返回一个锁。它也是一个公共方法,返回 void 且不带参数

语法

3. tryLock() 方法

这是在调用时获取锁的另一个重要方法。它不接受任何参数,并根据锁的可用性以布尔值返回锁。

语法

我们按以下方式使用 tryLock() 方法

4. tryLock(long time, TimeUnit unit) 方法

它类似于 tryLock() 方法(不带参数),当当前线程未被中断时,它会立即返回锁,并且锁将在给定的等待时间内被释放。

语法

参数

它接受以下两个参数

time: 获取锁的最大等待时间。

unit: time 参数的时间单位。

5. unlock() 方法

这是一个公共方法,用于释放锁。它不接受任何参数,也不返回任何值。

语法

让我们看一个示例,了解如何在 Java 中实现 Lock 接口。

LockExample.java

输出

Lock Interface in Java