常见设计模式,单例模式(双重检测锁方式)示例

本文详细介绍了单例模式的实现方式,重点讲解了双重检测锁方法,并探讨了其潜在的问题及改进方案。同时,推荐使用枚举或静态内部类方式实现更稳定的单例模式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

单例模式的实现方式有很多,常用的是双重检测锁方式,优点是代码简单,逻辑清晰,缺点是极其稀少情况下会失效。

当然,用枚举方式或静态内部类方式更值得推荐。

总之,作为反模式应用,这个算简单高效的。示例如下:

/**
 * 单例模式(双重检测锁,分三步):
 * 一、定义静态实例变量;
 * 二、隐藏构造函数;
 * 三、公开静态方法供外部调用以返回静态实例对象。
 * <br/>
 * 也许,以volatile修饰静态变量能让本单例更有效
 */
public class SingletonDemo {
    
    /**
     * 单例模式(三步之一):
     * 定义静态实例变量;
     */
    private static SingletonDemo instance;    
//    private static volatile SingletonDemo instance;    
    

    /**
     * 单例模式(三步之二):
     * 隐藏构造函数;
     */
    private SingletonDemo() {
    }    

    /**
     * 单例模式(三步之三):
     * 公开静态方法供外部调用以返回静态实例对象。
     * @return 返回该单例类的全局唯一实例对象。
     */
    public static SingletonDemo getInstance() {
        //测试确保静态实例对象尚未实例化,范围是是当前线程内
        if(instance==null) {
            //同步线程内的该单例类
            synchronized (SingletonDemo.class) {
                //再次测试确保静态实例对象尚未实例化,同步后范围就代表所有线程
                if(instance==null) {
                    //经两次测试后还为null时,即可放心地实例化这个单例对象了
                    instance = new SingletonDemo();
                }
            }
        }
        return instance;
    }

}

 

转载于:https://www.cnblogs.com/godwithus/p/9607710.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值