1、饿汉式,线程安全,效率低
public class SingletonTest { private SingletonTest() {} private static SingletonTest instance = new SingletonTest(); public static SingletonTest getInstance() { return instance; } }
2、饱汉式,非线程安全
public class SingletonTest { private SingletonTest() {} private static SingletonTest instance; public static SingletonTest getInstance() { if (instance == null) { instance = new SingletonTest(); } return instance; } }
3、静态内部类
public class SingletonTest { private static class Holder { private static final SingletonTest instance = new SingletonTest(); } public static final SingletonTest getInstance() { return Holder.instance; } }
4、双重检验
public class SingletonTest { private SingletonTest() {} private static SingletonTest instance; public static SingletonTest getInstance() { if (instance == null) { synchronized (SingletonTest.class) { if (instance == null) { instance = new SingletonTest(); } } } return instance; } }