public class Singleton{
private static Singleton singleton = new Singleton ();
private Singleton (){}
public static Singleton getInstance(){return singletion;}}
懒汉式(线程安全,调用效率不高,可以延时加载。)
public class Singleton{
private static Singleton singleton = null;
public static synchronized synchronized getInstance(){
if(singleton==null){
singleton = new Singleton();}return singleton;}}
双重检测锁式(由于JVM底层内部模型原因,偶尔会出问题,不建议使用)
public class Singleton {
private volatile static Singleton singleton;
private Singleton(){}
public Singleton getInstance(){if(null == singleton){
synchronized (Singleton.class){if(null == singleton){
singleton = new Singleton();}}}return singleton;}}
静态内部类式(线程安全,调用效率高。但是,可以延时加载)
public class StaticInnerClassSingleton {
private static class InnerClass {
private static StaticInnerClassSingleton staticInnerClassSingleton = new StaticInnerClassSingleton();}
public static StaticInnerClassSingleton getInstance(){return InnerClass.staticInnerClassSingleton;}}
枚举式(线程安全,调用率高,不能延时加载)
public class EnumSingleton {
private EnumSingleton(){}
private enum Singleton{
INSTANCE;
private final EnumSingleton instance;
Singleton(){
instance=new EnumSingleton();}
public EnumSingleton getInstance(){return instance;}}
public static EnumSingleton getInstance(){return EnumSingleton.INSTANCE.getInstance();}}