单例模式 (线程安全)

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

  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 @   吴磊的  阅读(491)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
//生成目录索引列表
点击右上角即可分享
微信分享提示