A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王维波 黑马帝   /  2011-11-1 17:06  /  3005 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

单例继承中的懒汉式的多线程问题
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的微博

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1 推荐饿汉式。

查看全部评分

6 个回复

倒序浏览
本帖最后由 lyc 于 2011-11-1 17:14 编辑

{:soso_e144:}用饿汉式呀

或者使用双重判断,就是用两个if()判断,其效率体现在对锁的判断,只要尽可能的减少锁的识别就提高效率了,建议看看毕老师的教学视频

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
在synchronized前在加一个是否为空的判断.老毕的视频里有详细讲解的.
回复 使用道具 举报
lyc 发表于 2011-11-1 17:10
用饿汉式呀

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

谢谢你   
回复 使用道具 举报
吉许 发表于 2011-11-1 17:18
在synchronized前在加一个是否为空的判断.老毕的视频里有详细讲解的.

谢谢你   
回复 使用道具 举报
毕老师讲的采用双重判断解决效率问题,代码如下:
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;

        }

}

}

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
王维波 黑马帝 2011-11-1 19:24:09
7#
祁焱 发表于 2011-11-1 18:55
毕老师讲的采用双重判断解决效率问题,代码如下:
public class DB
{

thanks     
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马