reentrantlock的trylock和lock
时间: 2024-05-18 19:17:58 浏览: 123
`ReentrantLock` 是 Java 中的一个可重入锁,它提供了两种获取锁的方法:`tryLock` 和 `lock`。
1. `tryLock`: 这个方法会尝试获取锁,如果锁当前没有被其他线程持有,则获取成功并立即返回true。如果锁被其他线程持有,该方法会立即返回false,而不会阻塞当前线程。可以通过这个方法来实现一些非阻塞的逻辑,例如尝试获取锁失败后执行一些备选操作。
示例代码:
```java
ReentrantLock lock = new ReentrantLock();
if (lock.tryLock()) {
try {
// 获取锁成功后的操作
} finally {
lock.unlock();
}
} else {
// 获取锁失败后的备选操作
}
```
2. `lock`: 这个方法会尝试获取锁,如果锁当前没有被其他线程持有,则获取成功。如果锁被其他线程持有,该方法会使当前线程进入阻塞状态,直到获取到锁为止。这种方式保证了同一时间只有一个线程能够执行临界区代码,但可能会导致线程的阻塞。
示例代码:
```java
ReentrantLock lock = new ReentrantLock();
lock.lock();
try {
// 获取锁成功后的操作
} finally {
lock.unlock();
}
```
需要注意的是,无论是使用 `tryLock` 还是 `lock`,在使用完锁之后都需要调用 `unlock` 方法释放锁,以便其他线程能够获取锁并执行相应的操作。另外,`ReentrantLock` 还支持可重入,即同一个线程可以多次获取同一个锁而不会导致死锁。
阅读全文