一个单一的类,负责创建自己的对象,同时确保系统中只有单个对象被创建。
单例特点
应用场景
什么场景用到?
- 多线程中的线程池
- 数据库的连接池
- 系统环境信息 上下文(ServletContext) ……
面试问题
- 系统环境信息(System.getProperties())?
- Spring中怎么保持组件单例的?
- ServletContext是什么(封装Servlet的信息)?是单例吗?怎么保证?
- ApplicationContext是什么?是单例吗?怎么保证?
- ApplicationContext: tomcat:一个应用(部署的一个war包)会有一个应用上下文
- ApplicationContext: Spring:表示整个IOC容器(怎么保证单例的)。
- ioc容器中有很多组件(怎么保证单例)
- 数据库连接池一般怎么创建出来的,怎么保证单实例? …… 、
代码实现
@Datapublic class Singleton {private String name;private String age;//volatile修饰 禁止指令重排序 保证内存可见性private static volatile Singleton singleton /*=new Singleton()*/;//饿汉式 加载类对象即创建/*构造方法私有化*/private Singleton(){}/*静态方法对外暴露获取单例方法*/public static Singleton getSingleton(){//双重加锁校验保证效率和线程安全 此处线程无需强锁等待直接返回if(singleton == null){synchronized (Singleton.class){if(singleton == null){singleton = new Singleton();}}}return singleton;}}

