//单例设计模式 //懒汉式 //优点: 第一步调用会初始化。避免内衬浪费 //缺点:必须加锁才能保证单例, 加锁会影响效率 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(){} }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)