单例模式的原理有些对象我们只需要一个比如线程池缓存硬件设备等。如果多个实例会有造成冲突结果不一致性等问题。单例模式确保一个类最多有一个实例并提供一个全局访问点。五种经典的单例模式1饿汉模式这种方式在类加载时就完成了初始化所以类加载较慢但获取对象的速度快。public class Singleton{ private static Singleton instance new Singleton(); private Singleton(){ } public static Singleton getInstance(){ return instance; } }2懒汉模式声明了一个静态对象在用户第一次调用时初始化。这种写法能够在多线程中很好地工作每次都需要同步。​ public class Singleton{ private static Singleton instance; private Singleton(){ } public static synchronized Singleton getInstance(){ if(instancenull){ instancenew Singleton(); } return instance; } } ​3双重检查模式这种写法在getinstance方法中对singleton进行了两次判空第一次是为了减少不必要的同步第二次是在singleton为空的时候才创建实例。​ public class Singleton{ private static volatile Singleton instance; private Singleton(){ } public static Singleton getInstance(){ if(instancenull){ synchornized(singleton.class){ if(instancenull){ instancenew Singleton(); } } } return instance; } } ​4,静态内部类单例模式public class Singleton{ private Singleton(){ } public static Singleton getInstance(){ return SingletonHolder.sInstance(); } private static class SingleHolder{ private static final Singleton sInstancenew Singleton(); } }5枚举单例模式public enum Singleton{ INSTANCE; public void doSomeThing(){ } }