单例与多例

1.单例设计模式

1.1不考虑多线程

public class Singleton {
    private static Singleton instance;
    private Singleton (){}
    public static Singleton getInstance() {
        if (instance == null)
            instance = new Singleton();
        return instance;
    }
}

1.2线程安全

采用双重校验锁。

把singleton变量声明为volatile,指示JVM,这个变量是不稳定的,每次使用它都到主存中进行读取(否则可能一个线程读取的是主存中的,一个线程读取的寄存器中的)。一般说来,多任务环境下各任务间共享的标志都应该加volatile修饰。

注意:对静态方法的同步,同步的是class。

public class Singleton {
    private volatile static Singleton singleton; 
    private Singleton (){}
    public static Singleton getSingleton() {
        if (singleton == null) {
            synchronized (Singleton.class) {
                if (singleton == null)
                    singleton = new Singleton();
            }
        }
        return singleton;
    }  
}

2.多例模式

多例模式(Multiton Pattern)是单例模式的自然推广。作为对象的创建模式,多例模式或多例类有以下的特点:
1、多例类可以有多个实例
2、多例类必须能够自我创建并管理自己的实例,并向外界提供自己的实例。
多例模式的典型例子就是数据库线程池。

posted @ 2014-04-26 23:10  Shanks-香克斯  阅读(518)  评论(0编辑  收藏  举报