可重入锁和不可重入锁的主要区别在于它们对同一线程多次获取同一资源时的处理方式。以下是对这两种锁机制的详细解析:
synchronized
关键字和ReentrantLock
类。以下是一个简单的Java代码示例,展示了如何使用ReentrantLock
实现可重入锁:
import java.util.concurrent.locks.ReentrantLock;
public class ReentrantLockExample {
private final ReentrantLock lock = new ReentrantLock();
public void methodA() {
lock.lock();
try {
// 临界区代码
} finally {
lock.unlock(); // 释放锁
}
}
public void methodB() {
lock.lock();
try {
methodA(); // 递归调用,可重入锁允许这样做而不会死锁
} finally {
lock.unlock(); // 释放锁
}
}
}
在这个例子中,methodA
和methodB
都可以安全地多次获取lock
对象,而不会导致死锁。
领取专属 10元无门槛券
手把手带您无忧上云