单例设计模式:一个类只能创建一个对象。
单例设计模式的分类:
1、饿汉式:类被加载的时候,对象就被创建出来。
2、懒汉式:类被加载对象不会创建,而是第一次使用对象时被创建。
饿汉式1:静态变量实现
public class Singleton {
private Singleton(){}
private static Singleton instance = new Singleton();
public static Singleton getInstance(){
return instance;
}
}
饿汉式2:静态代码块实现
public class Singleton {
private Singleton(){}
private static Singleton instance;
static {
instance = new Singleton();
}
public static Singleton getInstance() {
return instance;
}
}
懒汉式1:线程不安全
public class Singleton {
private Singleton(){}
private static Singleton instance;
public static Singleton getInstance() {
if(instance == null) {
instance = new Singleton();
}
return instance;
}
}
懒汉式2:线程安全
public class Singleton {
private Singleton(){}
private static Singleton instance;
public static synchronized Singleton getInstance() {
if(instance == null) {
instance = new Singleton();
}
return instance;
}
}
懒汉式3:双重检查锁
public class Singleton {
private Singleton(){}
private static volatile Singleton instance;
public static Singleton getInstance() {
if(instance == null) {
synchronized (Singleton.class) {
if(instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
饿汉式4:静态内部类
public class Singleton {
private Singleton() {}
private static class SingletonHolder {
private static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
}
枚举方式
public enum Singleton { INSTANCE; }