可重入锁解释

当一个锁是可重入的时候,同一个线程可以多次获取该锁而不被阻塞。这意味着线程可以重复进入同一个锁的临界区域。下面是一个使用可重入锁的示例代码:

import java.util.concurrent.locks.ReentrantLock;

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

    public static void main(String[] args) {
        try {
            lock.lock();
            System.out.println("Outer lock acquired");

            // 调用内部方法,再次获取同一个锁
            innerMethod();

            System.out.println("Outer lock released");
        } finally {
            lock.unlock();
        }
    }

    public static void innerMethod() {
        try {
            lock.lock();
            System.out.println("Inner lock acquired");
        } finally {
            lock.unlock();
            System.out.println("Inner lock released");
        }
    }
}

在上述代码中,我们使用ReentrantLock创建了一个可重入锁对象lock。在main方法中,我们首先获取了外部锁,并输出"Outer lock acquired"。然后调用了innerMethod方法,在该方法中再次获取了同一个锁,并输出"Inner lock acquired"。最后,我们释放了内部锁和外部锁,并分别输出"Inner lock released"和"Outer lock released"。

运行上述代码,可以看到输出结果为:

Outer lock acquired
Inner lock acquired
Inner lock released
Outer lock released

这证明了同一个线程可以多次获取同一个锁,并且在释放锁之后,其他线程才能获取该锁。这种可重入的特性使得线程在同一个锁的临界区域内可以嵌套调用,避免了死锁情况的发生。

你可能感兴趣的:(java,开发语言)