//单例设计模式
//懒汉式
//优点: 第一步调用会初始化。避免内衬浪费
//缺点:必须加锁才能保证单例, 加锁会影响效率
public class Singleton{
private static Singleton instance;
//私有化构造方法
private Singleton(){}
//线程安全
public static synchronized Singleton getInstance(){
if (instance==null){
instance = new Singleton();
}
return instance;
}
}
//饿汉式
//优点:没有加锁,效率高
//缺点:类加载是就初始化,浪费内存
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton() {
}
public static Singleton getInstance() {
return instance;
}
}
//双检锁/双重校验锁
//线程 安全 多线程情况下保持高性能
//volatile的作用:提高效率,可以解决加锁后多个线程需要判断锁,浪费资源
public class Singleton{
private volatile static Singleton singleton;
private Singleton(){}
public static Singleton getSingleton(){
if (singleton ==null){
synchronized (Singleton.class){
if (singleton==null){
singleton = new Singleton();
}
}
}
return singleton;
}
}
//静态内部类
//线程安全
//这种方式只适用于静态域的情况,双检锁方式可在实例域需要延迟初始化时使用。
public class Singleton{
private static class SingletonHolder{
private static final Singleton INSTANCE = new Singleton();
}
private Singleton(){}
public static final Singleton getInstance(){
return SingletonHolder.INSTANCE;
}
}
//枚举
//线程安全
//优点:简洁,自动支付序列化机制,防止多次实例化
public enum Singleton{
INSTANCK;
public void singletonMethod(){}
}