单例设计模式的4中模式:
懒汉式:
public class SingleInstance{ privte SingleInstance(); private static final SingleInstance instance= null; public static SingleInstance getInstance(){ if(instance ==null){ synchronized(SingleInstance.class){ if(instance==null){ instance= new SingleInstance(); } } } return instance; } }
饿汉式:
public class SingleInstance{ private SingleInstance(){}; private static final SingleInstance instance = new SingleInstance(); Public static SingleInstance getInstance(){ return instance; }
}
静态内部类:
public class SingleInstance{ private SingleInstance(); private static class Singleton{ private static final SingleInstance instance = new SingleInstance(); } public static SingleInstance getInstance(){ return Singleton.instance; } }
枚举:
public enum SingleInstance{ INSTANCE; public void SingleTon(){ } }
在饿汉式中,它是在类加载的时候创建,线程是安全的。而懒汉式是不安全的,它是需要想用的时候再创建,不用的时候不创建。
怎样才能使懒汉式可以变成安全的呢,可以通过双重锁的机制来让它变得安全,也就是帮它加锁。当为空的时候,再判断该单例.class。然后再次判断是否为空,如果为空,则才创建单例,这样就可以避免多次创建的原因。