public class Singleton { private static Singleton instance; private Singleton(){} public static Singleton getInstance(){ if(instance == null){ instance = new Singleton(); } return instance; } }
懒汉式,线程安全
Lazy初始化,多线程
1 2 3 4 5 6 7 8 9 10
public class Singleton{ private static Singleton instance; private Singleton(){} public static synchronized Singleton getInstance(){ if(instance == null){ instance = new Singleton(); } return instance; } }
饿汉式
非Lazy初始化,多线程,类加载时就初始化
1 2 3 4 5 6 7
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 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 6 7 8 9
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
public enum Singleton{ INSTANCE; public void whateverMethod(){ } }