> 文档中心 > 单例模式5种实现方法

单例模式5种实现方法


俄汉式(不能懒加载

/** * 优点:线程安全,调用效率较高 * 缺点:不能懒加载 */public class Sinleton {    //1.私有化构造器    private Sinleton() {    }    //2.立即加载对象    private static Sinleton instance = new Sinleton();    //3.提供访问接口    public static Sinleton getInstance(){ return instance;    }}

懒汉式(可以懒加载 )

/** * 优点:懒加载,避免了资源浪费 * 缺点:通过synchronized实现同步,并发效率低 */public class Sinleton {    //1.私有化构造器    private Sinleton() {    }    private static Sinleton instance = null;    //2.提供访问接口    public synchronized static Sinleton getInstance(){   //synchronized同步 if(instance==null)//3.第一次调用时候加载实例对象     instance = new Sinleton(); return instance;    }}

部类法(可以懒加载)

public class SingletonDemo1 {    private static class InnerClass{ public static SingletonDemo1 instance = new SingletonDemo1();    }    public static SingletonDemo1 get(){ return InnerClass.instance;    }}

枚举类法

public enum SingletonDemo2 {    INSTANCE;}

双重检测锁法(可以懒加载,由于jvm指令重排机制,故不建议使用)

public class SingletonDemo {    //私有构造方法    private SingletonDemo() {    }    private static SingletonDemo instance;    public static SingletonDemo get(){ SingletonDemo s; if(instance==null){     synchronized (SingletonDemo.class){  s = instance;  if(s==null){      synchronized (SingletonDemo.class){   s = new SingletonDemo();      }      instance = s;  }     } } return instance;    }}