单例模式是最简单的设计模式之一,保证了一个类只有一个实例,避免了频繁的创建销毁对象而带来性能的损耗。
1.Spring容器中使用的注册表式实现的单例模式,简单来说,就是使用同一个工具类,管理多个不同类的实例创建,每次只需在工具类中注册该类,即可获得该类的实例。
2.像我们在搭建heibernate框架时,是sessionFactory创建session, 用session对象操作数据库的。当多个线程共享session时就会出现数据安全问题,因此企业开发中,我们不会把它设计成单例模式。
/** * 单例模式: 双重锁定检查 * @author wuLei */ public class Single { // 类加载时申明对象, volatile解决多线程共享变量下及时感知变量的最新状态。 private volatile static Single single; //将无参构造私有化, 不允许外界直接new Single()来创建对象。 private Single () {}; // 创建对象 public static Single getInstance() { // 对象不为空才创建 if(single == null) { // 锁住这个类, 防止线程并发重复创建 synchronized (Single.class) { /* 之所以加这个判断是因为第一个线程获得了锁,而第二个线程在等待, * 而第一个线程创建对象后离开,此时第二个线程会获得锁重复创建。 */ if(single == null) { single = new Single(); } } } return single; } }