俄汉式(不能懒加载)
public class Sinleton { private Sinleton() { } private static Sinleton instance = new Sinleton(); public static Sinleton getInstance(){ return instance; }}
懒汉式(可以懒加载 )
public class Sinleton { private Sinleton() { } private static Sinleton instance = null; public synchronized static Sinleton getInstance(){ if(instance==null) 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; }}