懒汉就意味着只在需要的时候才进行初始化,但是线程不安全
public class Singleton { private static Singleton instance; public static Singleton getInstance(){ if(instance == null){ instance = new Singleton(); } return instance; } }线程安全,但是效率低,毕竟进行一次初始化以后的同步锁定毫无意义。
public class Singleton { private static Singleton instance; public static synchronized Singleton getInstance(){ if(instance == null){ instance = new Singleton(); } return instance; } }饿汉在类加载的时候就会对static的instance完成初始化
public class Singleton { private static Singleton instance = new Singleton(); public static Singleton getInstance(){ return instance; } }两次校验,第二次加锁,可以避免初始化后同步效率低的问题。
public class Singleton { public volatile static Singleton instance; public static Singleton getSingleton(){ if(instance == null){ synchronized(Singleton.class){ if(instance == null){ instance = new Singleton(); } } } return instance; } }单例模式的七种写法:http://cantellow.iteye.com/blog/838473