单件模式

单件模式

public class Singleton {

private static Singleton uniqueInstance;

private Singleton() {}

public static synchronized Singleton getInstance()
{
    if(uniqueInstance==null)
    {
        uniqueInstance=new Singleton();
    }
    return uniqueInstance;
}
}

通过增加synchronized关键字到getInstance()方法中,我们迫使每个线程在进入这个方法之前,要先等到别的线程离开该方法。也就是说,不会有两个线程可以同时进入这个方法。

1、如果getInstance()的性能对应用程序不是很关键,就什么都别做

同步getInstance()的方法既简单又有效,但是,同步一个方法可能造成程序执行效率下降100倍。因此,如果将getInstance()的程序用在频繁运用的地方,你可能就得重新考虑了。

2、使用“急切”创建实例,而不用延迟实例化的做法

public class Singleton {

private static Singleton uniqueInstance=new Singleton();

private Singleton() {}

public static Singleton getInstance()
{
    return uniqueInstance;
}
}

利用这个做法,我们依赖JVM在加载这个类时马上创建此唯一的单件实例。JVM保证在任何线程访问uniqueInstance静态变量之前,一定先创建此实例。

3、用“双重检查加锁”,在getInstance()中减少使用同步

public class Singleton {

private volatile static Singleton uniqueInstance;

private Singleton() {}

public static Singleton getInstance()
{
    if(uniqueInstance==null)
    {
        synchronized(Singleton.class) {
            if(uniqueInstance==null) {
                uniqueInstance=new Singleton();
            }
        }
    }
    return uniqueInstance;
}
}

猜你喜欢

转载自blog.csdn.net/jialing9183/article/details/80065809
今日推荐