zoukankan      html  css  js  c++  java
  • 常见设计模式,单例模式(双重检测锁方式)示例

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

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

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

    /**
     * 单例模式(双重检测锁,分三步):
     * 一、定义静态实例变量;
     * 二、隐藏构造函数;
     * 三、公开静态方法供外部调用以返回静态实例对象。
     * <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;
        }
    
    }
  • 相关阅读:
    mysql 覆盖索引
    mysql 连接查询 和 子查询
    mysql varchar
    uchome 是如何将数据插入数据库的
    Tomcat5 在windows安装服务
    Linux中错误码及描述查看
    Longines浪琴手表型号解释
    perl 安装 Net::Telnet 模块
    php一些错误的显示问题
    firefox样式表cursor和兼容Ie firefox,解决文字溢出的问题(wordwrap:breakword;wordbreak:breakall)
  • 原文地址:https://www.cnblogs.com/godwithus/p/9607710.html
Copyright © 2011-2022 走看看