懒汉式reentrantlocak加锁
时间: 2024-10-12 10:10:02 浏览: 17
java + 单例模式 + 懒汉式 + 资源
懒汉式线程安全单例模式中的"ReentrantLock"是一种重量级的互斥锁实现,它比传统的synchronized关键字更灵活,支持条件变量等高级功能。在懒汉式设计中,我们通常会推迟对锁的获取直到真正需要实例化时才创建锁。
具体来说:
1. **延迟初始化**:在单例类中,一开始不会立即创建锁,而是等到第一次请求实例时才创建ReentrantLock对象。
2. **双重检查锁定**:为了防止线程A在构造函数里获取到锁后,其他线程B再进入构造函数导致死锁,会添加一个额外的判断条件,只有当实例为null时才尝试获取锁。
3. **惰性获取锁**:只有当确实需要访问共享资源时,才会获取ReentrantLock,这减少了不必要的锁争抢,提高了性能。
以下是懒汉式ReentrantLock加锁的一个简化示例(Java代码):
```java
import java.util.concurrent.locks.ReentrantLock;
public class SingletonWithRLock {
private volatile ReentrantLock lock = new ReentrantLock();
private static SingletonWithRLock instance;
private SingletonWithRLock() {}
public synchronized static SingletonWithRLock getInstance() {
if (instance == null) {
lock.lock(); // 当实例为空时,获取锁
try {
if (instance == null) { // 双重检查锁定
instance = new SingletonWithRLock();
}
} finally {
lock.unlock(); // 确保锁最终释放
}
}
return instance;
}
}
```
阅读全文