`
woming66
  • 浏览: 58312 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

另类的Singleton模式

    博客分类:
  • Java
阅读更多
package com.zzq.singleton;

/**
* Double-check Locking的模式
* @author zhiqiang.zhu
* @version $Id: Singleton.java,v 0.1 2010-9-3 下午02:41:12 zhiqiang.zhu Exp $
*/
public class Singleton {

    /**
     * volatile类型的变量能够保持多线程并发访问此变量的同步问题
     * 但是只有JDK1.5以上版本才能正常使用。
     * JDK1.4之前的许多JVM,使用volatile会导致双重检测加锁失效
     */
    private volatile static Singleton instance = null;

    private Singleton() {
    }

    /**
     * 获取一个单实例(用双重锁定方法)
     * @return Singleton单实例
     */
    public static Singleton getInstance() {

        if (null == instance) {
           
            //synchronized(Singleton.class) 这种锁发会把所有基于
            //Singleton.class产生的实例对象都堵塞住(阿玺的原话)
            synchronized (Singleton.class) {
               
                //线程锁定后再次判断实例是否创建
                if (null == instance) {
                    instance = new Singleton();
                }
            }
        }

        return instance;
    }
}

/**
* 外国资料:http://en.wikipedia.org/wiki/Initialization_on_demand_holder_idiom
* 主要是运用了类JVM类加载器机制实现的
* @author zhiqiang.zhu
* @version $Id: Singleton.java,v 0.1 2010-9-3 下午03:00:57 zhiqiang.zhu Exp $
*/
class Something {
   
    private Something() {
    }

    /**
     * 加载Something时,首先要先加载LazyHolder
     * @author zhiqiang.zhu
     * @version $Id: Singleton.java,v 0.1 2010-9-3 下午03:14:54 zhiqiang.zhu Exp $
     */
    private static class LazyHolder {
        private static final Something INSTANCE = new Something();
    }

    public static final Something getInstance() {
        return LazyHolder.INSTANCE;
    }
}

分享到:
评论

相关推荐

    JAVA 设计模式的详细讲解另类解读

    1. **创建型模式**:这类模式主要用于对象的创建,如单例模式(Singleton)、工厂方法模式(Factory Method)、抽象工厂模式(Abstract Factory)、建造者模式(Builder)和原型模式(Prototype)。它们帮助我们在不...

    设计模式的另类讲法

    标题和描述均提到了“设计模式的另类讲法”,这是一种用生动有趣的方式解析软件工程中常见的设计模式的方法。设计模式是在软件开发过程中为解决特定问题而形成的最佳实践,它们帮助开发者以更有效的方式设计软件架构...

    C++设计模式 (GOF23 种设计模式的另外解析)

    - **Singleton模式**:确保一个类只有一个实例,并提供一个全局访问点。 - **Builder模式**:将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。 - **Prototype模式**:通过复制已有的...

    MM_designpatterns_中文SN2002-9-28_

    文档提到ModelMaker6.2支持八种设计模式,分别是Visitor、Observer、Wrapper、Singleton、Mediator、Decorator、ReferenceCount和Lock。这些模式都是基于经典的《Design Patterns: Elements of Reusable Object-...

    系统分析员必备—技术规范文萃(word160多页)(强烈推荐)

    技术规范文萃160多页Doc格式(强烈推荐).zip Abstract Factory(抽象工厂模式) Factory Method(工厂模式) Prototype(原型模式) Singleton(单件模式) Adapter(适配器模式) …… 大多了,大家自己看吧

    A Single-Instance Application Class(54KB)

    描述中没有提供具体细节,但我们可以根据常见的单例模式(Singleton Pattern)来推测其内容。单例模式是一种设计模式,确保一个类只有一个实例,并提供一个全局访问点。在C++中,实现单例通常涉及到静态成员变量和...

Global site tag (gtag.js) - Google Analytics