单例模式 (线程安全)

单例模式是最简单的设计模式之一,保证了一个类只有一个实例,避免了频繁的创建销毁对象而带来性能的损耗。

  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;
    }
}
posted @ 2018-08-14 23:27  吴磊的  阅读(488)  评论(0编辑  收藏  举报
//生成目录索引列表