单例模式
简介
单例模式确保一个类只有一个实例,并提供一个全局访问点。
实现
- 使用”急切”创建实例(饿汉式)
在JVM加载类时创建单例。保证了线程安全。
public class Singleton {
//静态初始化
private static Singleton uniqueInstance = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return uniqueInstance;
}
}
- 使用”双重检查加锁”,延迟实例化创建实例(懒汉式)
检查实例,如果不存在就进入同步代码块。进入代码块后,再检查一次,如果仍是null,才创建实例。
注意:只有第一次才彻底执行同步代码块的代码,大大减少getInstance方法的时候耗费。
volatile 关键词确保,当uniqueInstance变量被初始化成Singleton实例时,多个线程正确的处理uniqueInstance变量。
public class Singleton {
private volatile static Singleton uniqueInstance;
private Singleton() {}
public static Singleton getInstance() {
if (uniqueInstance == null) {
synchronized (Singleton.class) {
if (uniqueInstance == null) {
uniqueInstance = new Singleton();
}
}
}
return uniqueInstance;
}
}
使用
public class SingletonClient {
public static void main(String[] args) {
Singleton singleton = Singleton.getInstance();
}
}
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!