ReentrantLock怎么用的
时间: 2024-01-17 14:19:10 浏览: 23
ReentrantLock是Java提供的一种锁,它具有可重入、可中断、可公平和非公平等特性。下面是ReentrantLock的基本使用方法:
1. 创建ReentrantLock对象:
```java
ReentrantLock lock = new ReentrantLock();
```
2. 获取锁:
```java
lock.lock();
try {
// 执行需要同步的代码块
} finally {
lock.unlock(); // 释放锁
}
```
3. 可重入性:
ReentrantLock允许同一个线程多次获取锁,而不会造成死锁。例如,在一个线程中获取了锁之后,可以继续获取锁而不会被阻塞。
4. 可中断性:
ReentrantLock提供了可中断的获取锁的方式,即在等待获取锁的过程中,可以通过调用`lockInterruptibly()`方法来中断等待。
5. 公平锁和非公平锁:
ReentrantLock可以作为公平锁或非公平锁来使用。在创建ReentrantLock对象时,可以传入一个boolean值来指定是否使用公平锁,默认为非公平锁。
6. 其他常用方法:
- `tryLock()`:尝试获取锁,如果锁可用则获取并立即返回true,否则返回false。
- `tryLock(long timeout, TimeUnit unit)`:在指定的时间内尝试获取锁,如果锁可用则获取并立即返回true,否则等待指定时间后返回false。
- `isHeldByCurrentThread()`:判断当前线程是否持有锁。
注意:在使用ReentrantLock时,需要在finally块中释放锁,以确保锁的释放。