您的位置:首页 > 其它

设计模式--单件模式

2014-04-08 15:20 218 查看
单件模式:确保一个类只有一个实例,并提供一个全局访问点。



采用私有构造器。

1.懒汉,线程安全

public class Singleton {
private static Singleton instance;
private Singleton (){}
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
这种学法效率低。

2.饿汉

public class Singleton {
private static Singleton instance = new Singleton();
private Singleton (){}
public static Singleton getInstance() {
return instance;
}
}
这种方式基于classloader机制避免了多线程的同步问题,但没有达到lazy loading的效果。

3.静态内部类

public class Singleton {
private static class SingletonHolder {
private static final Singleton INSTANCE = new Singleton();
}
private Singleton (){}
public static final Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
}
这种方式也是基于classLoader机制避免了多线的同步问题,但是达到了lazy loading的效果。

4.双重校骏锁

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;
}
}
这种方式即线程安全,又能够使性能不受到很大的影响。并不是每次进入getInstance方法都需要同步,而是先不同步,进入方法后,先检查实例是否存在,如果不存在才进入下面的同步块,这是第一重检查。进入同步块后,再次检查实例是否存在,如果不存在,就是同步的情况下创建一个实例,这是第二重检查。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: