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


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

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

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

    /**
     * 单例模式(双重检测锁,分三步):
     * 一、定义静态实例变量;
     * 二、隐藏构造函数;
     * 三、公开静态方法供外部调用以返回静态实例对象。
     * <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;
        }
    
    }
  • 相关阅读:
    计算机网络学习笔记——计算机网络概述
    基础续一
    Python基础一
    linux lvm的操作手册_pvcreate_vgcreate_lvcreate_相关
    Oracle Linux 挂载存储
    MegaCLI SAS RAID Management Tool
    DELL RACADM 批量升级戴尔IDRAC固件
    LSI MegaCli 命令使用4
    LSI MegaCli 命令使用2
    LSI MegaCl i命令使用1
  • 原文地址:https://www.cnblogs.com/godwithus/p/9607710.html
Copyright © 2020-2023  润新知