一、单例模式介绍
一个类只能有一个实例。
二、示例
1、双重检查加锁方式
public class Singleton {
//需要使用volatile,禁止指令重排序(new instance())
private static volatile Singleton instance = null;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
2、静态内部类方式
public class Singleton2 {
private Singleton2() {}
private static class Inner {
private static Singleton2 instance = new Singleton2();
}
public static Singleton2 getInstance() {
return Inner.instance;
}
public static void main(String[] args) {
Singleton2 s1 = Singleton2.getInstance();
Singleton2 s2 = Singleton2.getInstance();
System.out.println(s1 == s2);
}
}