单利设计模式
懒汉式 单例模式
<pre>
public class MyPrototypeLazySingleModel {
private static MyPrototypeLazySingleModel instance ;
private MyPrototypeLazySingleModel() {
}
public static synchronized MyPrototypeLazySingleModel getInstance(){
if(instance == null){
instance = new MyPrototypeLazySingleModel();
}
return instance;
}
}
</pre>
饿汉式 单利模式
<pre>
public class MyPrototypeHungrySingleModel {
private static MyPrototypeHungrySingleModel instance = new MyPrototypeHungrySingleModel();
private MyPrototypeHungrySingleModel() {}
public static synchronized MyPrototypeHungrySingleModel getInstance(){
return instance;
}
}
</pre>
懒汉式与饿汉式的区别:
懒汉式:实名一个静态对象,并且在用户第一次调用getInstance 时进行初始化,
优点:单例只有在使用时才会被实例化,一定程度上节约了资源。
缺点:是第一次加载时需要及时进行实例化,反应稍慢,最大的问题是每次调用getInstance 都进行同步,造成不必要的同步开销。一般不建议这么用。
双重锁式 单例模式 (DCL )
<pre>
public class myPrototypeSingleModel {
private static volatile myPrototypeSingleModel instance = null;
private myPrototypeSingleModel() {}
public static myPrototypeSingleModel getInstance(){
if(instance == null){
synchronized (myPrototypeSingleModel.class){
if(instance == null){
instance = new myPrototypeSingleModel();
}
}
}
return instance;
}
}
</pre>
DCL 的优点,资源利用率高,第一次执行getInstance 时才会被实例化,效率高。
缺点:第一次加载反应慢,也由于java 内存 模型的原因偶尔会失败,在高并发环境下,有一定缺陷,虽然发生概率很小。(很常用)
网友评论