双重检查锁定的Java代码
时间: 2024-02-18 16:06:33 浏览: 68
java代码双重混淆
双重检查锁定(Double-Checked Locking)是一种常见的单例模式实现方式,它可以在多线程情况下保证单例对象的线程安全性和高效性。
以下是一个使用双重检查锁定实现单例模式的Java代码示例:
```
public class Singleton {
private volatile static Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
synchronized(Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
```
在这个示例中,我们首先检查 instance 是否为空,如果为空,则进入同步代码块。在进入同步代码块之前,我们再次检查 instance 是否为空,这是为了防止在等待锁的过程中,其他线程已经创建了实例。在同步代码块中,我们再次检查 instance 是否为空,如果为空,则创建一个新的 Singleton 实例。此时,其他线程在等待锁的过程中,已经检查过 instance 不为空,因此不会重复创建实例。最后,我们返回 Singleton 实例。
需要注意的是,instance 前添加了 volatile 关键字,这是为了禁止指令重排优化,保证在多线程环境下也能正常工作。
双重检查锁定是一种比较常见的单例模式实现方式,但在一些特定场景下,可能会存在线程安全问题或性能问题,因此需要谨慎使用。
阅读全文