ReentrantLock尝试获取锁的代码
时间: 2024-01-12 17:36:14 浏览: 76
在使用ReentrantLock时,可以使用`tryLock()`方法来尝试获取锁。该方法会立即返回一个布尔值,表示是否成功获取锁。
代码示例:
```java
import java.util.concurrent.locks.ReentrantLock;
public class ReentrantLockExample {
private ReentrantLock lock = new ReentrantLock();
public void doSomething() {
if (lock.tryLock()) {
try {
// 成功获取锁后执行的代码逻辑
System.out.println(Thread.currentThread().getName() + " acquired the lock");
// 执行其他业务逻辑
} finally {
lock.unlock();
}
} else {
// 未成功获取锁时的处理逻辑
System.out.println(Thread.currentThread().getName() + " failed to acquire the lock");
// 可以选择等待一段时间后重新尝试获取锁,或者执行其他业务逻辑
}
}
public static void main(String[] args) {
ReentrantLockExample example = new ReentrantLockExample();
// 创建多个线程尝试获取锁
for (int i = 0; i < 5; i++) {
new Thread(() -> {
example.doSomething();
}).start();
}
}
}
```
在上述示例中,多个线程通过调用`doSomething()`方法来尝试获取锁。如果线程成功获取到锁,则输出当前线程名称并执行其他业务逻辑;如果未成功获取到锁,则输出当前线程名称并执行其他处理逻辑。
需要注意的是,`tryLock()`方法是非阻塞的,如果锁已经被其他线程占用,当前线程会立即返回false,而不是等待获取锁。这使得我们可以在获取锁失败时进行其他处理,而不是一直等待锁的释放。
另外,`tryLock()`方法还有一个重载版本,可以指定等待时间,在指定的时间内尝试获取锁,若超时仍未获取到锁,则返回false。例如:`tryLock(long timeout, TimeUnit unit)`。
总之,`tryLock()`方法提供了一种灵活的方式来尝试获取锁,并根据返回的结果来进行相应的处理。
阅读全文