public class Singleton { private static Singleton instance; public Singleton() { // TODO Auto-generated constructor stub } public static synchronized Singleton getInstance(){ if (instance == null) { instance = new Singleton(); } return instance; } }
public class Singleton { private static final Singleton instance = new Singleton(); public Singleton() { // TODO Auto-generated constructor stub } public static Singleton getInstance(){ return instance; } }
public class Singleton { private static volatile Singleton instance;//加上volatile取消jvm的重排序优化 public Singleton() { // TODO Auto-generated constructor stub } public static Singleton getInstance(){ if (instance == null) { //第一次检验 synchronized (Singleton.class) { if (instance == null) { //第二次检验 instance = new Singleton(); } } } return instance; } }
public class Singleton { private static class SingletonHolder{ private static final Singleton INSTANCE = new Singleton(); } public Singleton() { // TODO Auto-generated constructor stub } public static Singleton getInstance(){ return SingletonHolder.INSTANCE; } }
public enum Singleton { INSTANCE; }
http://javarevisited.blogspot.sg/2014/05/double-checked-locking-on-singleton-in-java.html
http://javarevisited.blogspot.sg/2012/07/why-enum-singleton-are-better-in-java.html