1.如何理解单例模式
- 保证一个类的实例在"“特定范围”"只有一份(例如一个JVM内部,一个线程内部),并且提供一个全局访问点可以访问到这份实例
2.单例模式应用场景
- Spring(Singleton作用域的Bean对象) BeanFactory.getBean访问点
- Mybatis(ErrorContext对象是每个线程一份此类实例)
- 常量池,连接池,线程池等
3.单例模式对象角色构成
- 具体产品对象(例如;Singleton)
4.单例模式应用分析
- 优势:科学使用资源,避免频繁创建,销毁对象时造成对资源的浪费
- 劣势:设计不够严谨会存在线程安全问题,可扩展性相对较差
5.如何设计
- 构造方法私有化,自关联
方法添加synchronized
添加同步代码块(以前效率比同步方法高,目前JVM已作出调整,没有区别)
双重验证(大对象,稀少用,适当减少阻塞)
利用静态属性,实时创建(类加载就会创建,适合小对象频繁访问)
利用静态内部类特点(延迟加载,适合大对象,频繁访问)
基于枚举类型创建单例对象