reentrantlock 实用示例
时间: 2024-09-30 07:03:18 浏览: 30
ReentrantLock 是 Java 中的一个互斥锁实现,它支持公平锁和非公平锁,以及尝试获取、条件中断等高级特性,使得线程同步更加灵活。下面是一个简单的 ReentrantLock 实用示例:
```java
import java.util.concurrent.locks.ReentrantLock;
public class LockExample {
private final ReentrantLock lock = new ReentrantLock();
public void methodThatNeedsLocking() {
lock.lock();
try {
// 在这里执行需要互斥的操作,如数据库操作、文件修改等
System.out.println("Thread " + Thread.currentThread().getId() + " is executing critical section.");
} catch (InterruptedException e) {
e.printStackTrace(); // 处理中断异常
} finally {
lock.unlock(); // 确保解锁,释放资源
}
}
public static void main(String[] args) {
LockExample example = new LockExample();
new Thread(() -> example.methodThatNeedsLocking(), "Thread A").start();
new Thread(() -> example.methodThatNeedsLocking(), "Thread B").start(); // 如果两个线程同时运行,会被阻塞直到第一个线程释放锁
}
}
```
在这个例子中,`methodThatNeedsLocking`方法通过 `lock()` 获取锁,然后执行受保护的操作。如果另一个线程试图在同一时间获取锁,它将被阻塞,直到持有锁的线程完成并调用 `unlock()`。这样就能保证在任何时候只有一个线程能访问临界区。
阅读全文