ReentrantLock 是 Java 并发包中的一个锁实现,它支持可重入性(即同一个线程可以多次获得同一个锁),提供了更灵活的锁控制和功能,相比于 synchronized 关键字,ReentrantLock 提供了更多的操作和扩展性。

下面是一个简单的例子,展示了如何使用 ReentrantLock:

import java.util.concurrent.locks.ReentrantLock;

public class ReentrantLockExample {
    private final ReentrantLock lock = new ReentrantLock();

    public void performTask() {
        lock.lock(); // 获得锁
        try {
            // 执行需要同步的代码块
            // ...
        } finally {
            lock.unlock(); // 释放锁
        }    
}
}

在上面的示例中,我们创建了一个 ReentrantLock 对象,并在 performTask() 方法中使用该锁来保护需要同步的代码块。

在方法体中,我们首先调用 lock.lock() 方法来获取锁,如果锁已经被其他线程占用,当前线程会被阻塞,直到获得锁为止。然后,我们执行需要同步的代码块。最后,在 finally 块中使用 lock.unlock() 方法来释放锁。

使用 ReentrantLock 还可以使用 tryLock() 方法来尝试获得锁,如果锁不可用,则立即返回,而不是阻塞当前线程。另外,ReentrantLock 还提供了条件变量(Condition)的支持,可以更灵活地控制线程的等待和唤醒。

需要注意的是,与 synchronized 关键字不同,使用 ReentrantLock 需要手动释放锁,否则可能导致死锁的情况发生。因此,在使用 ReentrantLock 时需要谨慎确保锁的正确释放。

Java 并发编程:ReentrantLock 使用详解及示例

原文地址: https://www.cveoy.top/t/topic/jqT 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录