懒汉模式-线程不安全 1 2 3 4 5 6 7 8 9 10 11 12 13 public class Singleton { private static Singleton instance; private Singleton ( ){ } public static Singleton getInstance( ) { if (instance == null ) { instance = new Singleton( ); } return instance; } } 懒汉模式-线程安全 1 2 3 4 5 6 7 8 9 10 11 12 13 public class Singleton { private static Singleton instance; private Singleton ( ){ } public static synchronized Singleton getInstance( ) { if (instance == null ) { instance = new Singleton( ); } return instance; } } 饿汉模式 1 2 3 4 5 6 7 8 9 10 11 public class Singleton { private static Singleton instance = new Singleton( ); private Singleton ( ){ } public static Singleton getInstance( ) { return instance; } } 饿汉模式-变种 1 2 3 4 5 6 7 8 9 10 11 12 13 14 public class Singleton { private Singleton instance = null; static { instance = new Singleton( ); } private Singleton ( ){ } public static Singleton getInstance( ) { return this.instance; } } 静态内部类 1 2 3 4 5 6 7 8 9 10 11 12 13 public class Singleton { private static class SingletonHolder { private static final Singleton INSTANCE = new Singleton(); } private Singleton (){ } public static final Singleton getInstance() { return SingletonHolder.INSTANCE; } } 双重校验锁 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 public class Singleton { private volatile static Singleton singleton; private Singleton (){ } public static Singleton getSingleton() { if (singleton == null) { synchronized (Singleton.class) { if (singleton == null) { singleton = new Singleton(); } } } return singleton; } } 枚举 1 2 3 4 5 public enum Singleton { INSTANCE; public void whateverMethod() { } }