请写出线程安全的单例模式
时间: 2023-09-30 20:13:10 浏览: 98
下面是一个线程安全的单例模式的示,采用双重锁定(Double-Checked Locking)的方式实现。
```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;
}
}
```
解释:
- `volatile` 关键字用于确保多线程环境下对 `instance` 的可见性,保证其在内存中的修改对所有线程可见。
- 私有构造函数确保其他类无法直接实例化该类。
- `getInstance()` 方法是获取单例实例的入口。首先检查 `instance` 是否已经被实例化,如果没有,进入同步代码块。在同步代码块内部再次检查 `instance` 是否为 `null`,如果是,则实例化一个新的 `Singleton` 对象。这样可以确保只有第一个进入同步代码块的线程会创建实例,避免了多个线程同时创建实例的问题。
这种方式在多线程环境下能够确保只有一个实例被创建,并且延迟了实例化过程,只有在第一次调用 `getInstance()` 方法时才会创建实例。
阅读全文