日期:2014-05-20  浏览次数:20637 次

单子模式修改。进来看看。
~有事情要讨论。

~大家都知道单子模式吧。

单子模式下。是需要用到 synchronized的。

但是 他比 非同步慢 100陪 可能

~但 只有第一次调用该方法才需要 同步 一旦 初始化 完成同步操作 就完全没必要了。。

~大家觉得应该怎么去 改改。


就好比 
private static Resoure res=null;
public static synchronized Resource getResource(){
if(res==null){
res = new Resource();
}
return res;
}
这个方法在多线程情况下可能 有线程同时到 if(res==null)这个上面,当然我们用到了 synchronized 不会有问题,但是速度非常慢。况且 我们只需要第一调用才用到同步,一旦res初始化后同步操作 就完全没必要了。
应该如何修改。


--------------------------------
以下内容为自动编辑的内容,并非楼主的发贴内容,此仅用于显示而已,并无任何其他特殊作用
楼主【liubowen】截止到2008-08-04 16:03:42的历史汇总数据(不包括此帖):
发帖的总数量:4 发帖的总分数:110 每贴平均分数:27  
回帖的总数量:2 得分贴总数量:0 回帖的得分率:0%  
结贴的总数量:1 结贴的总分数:20  
无满意结贴数:0 无满意结贴分:0  
未结的帖子数:3 未结的总分数:90  
结贴的百分比:25.00 % 结分的百分比:18.18 %  
无满意结贴率:0.00 % 无满意结分率:0.00 %  
楼主该结一些帖子了
取消马甲机器人,请点这里:http://www.java2000.net/mycsdn/robotStop.jsp?usern=liubowen

------解决方案--------------------
单态有两种形式:
1.饿汉式:
public class Singleton{
// 在自己内部定义一个自己的实例
// 注意,这个是private 只供内部调用
private static Singleton instance = new Singleton();
//将构造函数设为私有
private Singleton(){
}
// 静态工厂方法,提供一个供外部使用得到对象的静态方法
public static Singleton getInstance(){
return instance;
}
}


2. 懒汉式:

 public class Singleton{
private static Singleton instance = null;
private Singleton(){
}
public static synchronized Singleton getInstance (){
if(instance==null)
instance = new Singleton();
return instance;
}
}
------解决方案--------------------
public class Singleton {

private static final Singleton instance = new Singleton();

private Singleton(){}

public static Singleton getInstance(){
return instance;
}

}

这是另一种单例模式。
------解决方案--------------------
第一种:
public class Singleton { 

private volatile static final Singleton instance = null;

private Singleton(){} 

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




第二种:
public class Singleton { 
 

private Singleton(){} 

private static class SingletonInner {
static Singleton instance = new Singleton();
}


public static Singleton getInstance(){ 
return SingletonInner.instance; 


}

两种方法各有优缺点,看楼主自己选择!