双重检查锁懒汉式单例
时间: 2023-08-13 08:07:29 浏览: 110
双重检查锁懒汉式单例是一种常见的单例实现方式,具体实现如下:
```java
public class Singleton {
private static volatile Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
```
在这个例子中,`getInstance()` 方法首先检查 `instance` 是否已经被实例化,如果没有,那么首先获取 `Singleton.class` 的锁,然后再次检查 `instance` 是否已经被实例化。如果没有,那么实例化 `instance`。使用 `volatile` 关键字可以保证多线程环境下的线程安全。
需要注意的是,双重检查锁懒汉式单例需要使用 `volatile` 关键字来确保多线程环境下的正确性。在 Java 5 之前,使用双重检查锁懒汉式单例可能会出现线程安全问题。在 Java 5 以后,JVM 对 `volatile` 关键字的实现进行了优化,可以确保多线程环境下的正确性。
阅读全文