用java实现一个可重入锁
时间: 2024-10-01 07:00:17 浏览: 29
在Java中,可以使用`java.util.concurrent.locks.ReentrantLock`类来创建一个可重入锁。这个类是`ReentrantReadWriteLock`的一个子类,支持互斥(独占)锁定,同时允许持有锁的线程再次进入同步代码块,即可重入。
下面是一个简单的例子展示了如何创建并使用一个可重入锁:
```java
import java.util.concurrent.locks.ReentrantLock;
public class ReentrantLockExample {
private final ReentrantLock lock = new ReentrantLock();
public void methodThatNeedsLock() {
lock.lock(); // 获取锁
try {
// 同步代码块
System.out.println("Method is executing...");
} finally {
lock.unlock(); // 无论是否异常都会释放锁
}
}
public void recursiveMethod() {
if (lock.tryLock()) { // 尝试获取锁,不会阻塞
try {
methodThatNeedsLock();
methodThatNeedsLock(); // 可以多次尝试进入,因为是可重入的
} finally {
lock.unlock();
}
} else {
System.out.println("Lock is already held by another thread.");
}
}
public static void main(String[] args) {
ReentrantLockExample example = new ReentrantLockExample();
example.recursiveMethod();
}
}
```
在这个例子中,`methodThatNeedsLock()`被锁定,然后`recursiveMethod()`可以在获得锁的情况下多次调用它。如果其他线程试图获取相同的锁,它会等待直到当前线程释放。
阅读全文