当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

单例模式

发表于: 2015-04-19   作者:dsxwjhf   来源:转载   浏览:
摘要: package com.wjxie.designpattern; /** * * 单例模式。 * * volatile 作用: * 1. 其它线程立即可见; * 2. 禁止指令重排序。 * */ public class Singleton {     private static volatile Singleton i
package com.wjxie.designpattern;

/**
*
* 单例模式。
*
* volatile 作用:
* 1. 其它线程立即可见;
* 2. 禁止指令重排序。
*
*/
public class Singleton {

    private static volatile Singleton instance = null;

    private Singleton() {

    }

    public static Singleton getInstance() {
        if (instance == null) {
            // 下面这句可能需要等待其它线程释放 Singleton.class 的对象锁,本线程被阻塞。如果是这样,那意味着:
            // 本线程执行上面 instance == null 判断的时候,已经有别的线程开始构造 instance 实例了,但还没有构造完毕。因此 if 条件成立,程序走到了这里。
            // OK ,我们等了5秒钟。这时候其它线程对 instance 的初始化过程执行完毕了,它释放了 Singleton.class 的对象锁,被本线程得到,继续执行同步块内的代码。
            // 这就是我们为什么需要再次判断 instance == null 的原因,如果不做判断有可能会再创建一个对象。
            synchronized (Singleton.class) {
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }

}

单例模式

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号