解释重入锁(ReentrantLock)的概念及其工作原理。

在Java中,ReentrantLock是一种实现了重入特性的互斥锁,它是java.util.concurrent.locks包的一部分。”重入”意味着一个线程可以多次获取同一把锁。在某些情况下,这可以提高灵活性,并防止死锁。

ReentrantLock提供了与synchronized关键字相似的同步功能,但比synchronized更加灵活。它提供了更高级的功能,如尝试非阻塞地获取锁(tryLock()),可中断的锁获取操作(lockInterruptibly()),公平锁等。

以下是一个ReentrantLock的简单示例:

import java.util.concurrent.locks.ReentrantLock;

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

    public void doSomething() {
        lock.lock();  // 获取锁
        try {
            // 保护的代码段
        } finally {
            lock.unlock();  // 释放锁
        }
    }
}

在这个例子中,doSomething方法使用了ReentrantLock保护了一个代码段,确保在同一时间只有一个线程可以执行这个代码段。

需要注意的是,ReentrantLock不会像synchronized那样,在出现异常或者线程结束时自动释放锁,所以我们需要在finally块中手动释放锁,以避免发生死锁。

发表评论

后才能评论