黑马程序员技术交流社区

标题: 单例继承中的懒汉式的多线程问题 [打印本页]

作者: 王维波    时间: 2011-11-1 17:06
标题: 单例继承中的懒汉式的多线程问题
单例继承中的懒汉式的多线程问题
public class DB {
    private static DB db = null;
     
    public static DB getInstance(){
       synchronized(DB.class)
        if(db == null){
            db = new DB();
        }
        return db;
    }
}


这个代码解决了多线程的安全问题,但是,也暴露出了效率的问题,如何解决效率问题,请心思细腻的朋友们帮助解决下。  Thanks

该贴已经同步到 保持常态0616的微博
作者: 刘永昌    时间: 2011-11-1 17:10
本帖最后由 lyc 于 2011-11-1 17:14 编辑

{:soso_e144:}用饿汉式呀

或者使用双重判断,就是用两个if()判断,其效率体现在对锁的判断,只要尽可能的减少锁的识别就提高效率了,建议看看毕老师的教学视频
作者: 吉许    时间: 2011-11-1 17:18
在synchronized前在加一个是否为空的判断.老毕的视频里有详细讲解的.
作者: 王维波    时间: 2011-11-1 17:33
lyc 发表于 2011-11-1 17:10
用饿汉式呀

或者使用双重判断,就是用两个if()判断,其效率体现在对锁的判断,只要尽可能 ...

谢谢你   
作者: 王维波    时间: 2011-11-1 17:34
吉许 发表于 2011-11-1 17:18
在synchronized前在加一个是否为空的判断.老毕的视频里有详细讲解的.

谢谢你   
作者: 祁焱    时间: 2011-11-1 18:55
毕老师讲的采用双重判断解决效率问题,代码如下:
public class DB
{

        private static DB db=null;

private  DB(){}

public static DB getInstance()

{

           if(db==null)

{  

        synchronized(DB.class)

       {

             if(db==null)

                    db=new DB();//延迟加载

              return  db;

        }

}

}


作者: 王维波    时间: 2011-11-1 19:24
祁焱 发表于 2011-11-1 18:55
毕老师讲的采用双重判断解决效率问题,代码如下:
public class DB
{

thanks     




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2