import java.util.concurrent.locks.ReentrantLock;
public class ReentrantLockExample {
private final ReentrantLock lock = new ReentrantLock();
public void performOperation() {
lock.lock(); // 获取锁
try {
// 执行临界区代码
System.out.println("Critical section executed by " + Thread.currentThread().getName());
} finally {
lock.unlock(); // 确保在任何情况下都释放锁
}
}
public static void main(String[] args) {
ReentrantLockExample example = new ReentrantLockExample();
// 创建多个线程来测试ReentrantLock
Thread t1 = new Thread(() -> example.performOperation(), "Thread-1");
Thread t2 = new Thread(() -> example.performOperation(), "Thread-2");
t1.start();
t2.start();
}
}
ReentrantLock:ReentrantLock 是 java.util.concurrent.locks 包中的一个类,提供了与内置锁(即 synchronized)类似的锁机制,但具有更灵活的功能。
lock.lock() 和 lock.unlock():lock.lock() 方法用于获取锁,而 lock.unlock() 方法用于释放锁。确保在 finally 块中调用 unlock(),以保证即使发生异常也能正确释放锁。
临界区代码:在 try 块中的代码是临界区代码,只有当线程持有锁时才能执行这段代码。其他线程必须等待当前线程释放锁后才能进入临界区。
多线程测试:通过创建多个线程来测试 ReentrantLock 的效果,确保同一时间只有一个线程能够执行临界区代码。
上一篇:java数组赋值
下一篇:java数据库
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站