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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

5黑马币
//但是都比较低效(对锁的判断所致),可以用双重判断*来提高效率.同步锁的对象是"类名.class"(此方法为静态方法),如下
class Single
{
         privatestatic Singele s =null;
         privateSingle(){}
         publicstatic Single getInstance()
         {
                   if(s==null)//双重判断,问题:此处也是每次都需判断,与锁的判断相比效率更高吗?
                   {
                            synchronized(Single.class)//同步锁的对象是"类名.class"
                            {
                                     if(s==null)
                                               s=new Single();
                            }
                   }
                   returns;
         }
}
//毕老师的视屏中讲的,线程同步后为了减少锁的判断,加了if条件双重判断减少了锁的判断,但是却增加了if判断,效率上是否有提高?

最佳答案

查看完整内容

明显效率更高,因为不用等。你这里是不是想说虽然减少了一部分线程的加锁操作,但是所有线程都要进行if判断效率有没有提高。 看过毕老师视频,你应该记得他那个比喻,把一个锁比喻成一个房间,当有人在锁里的的时候,另一个人想进去,需要判断锁的状态,需要等那个人出来,我觉得这个过程比单纯的逻辑判断要效率低的多,因为if语句很容易能得出结果。 通过双重判断,当s对象存在时,不需要再进行锁状态的判断了,所以效率高。另外 ...

3 个回复

倒序浏览
本帖最后由 夸克 于 2015-8-24 23:55 编辑

明显效率更高,因为不用等。你这里是不是想说虽然减少了一部分线程的加锁操作,但是所有线程都要进行if判断效率有没有提高。
看过毕老师视频,你应该记得他那个比喻,把一个锁比喻成一个房间,当有人在锁里的的时候,另一个人想进去,需要判断锁的状态,需要等那个人出来,我觉得这个过程比单纯的逻辑判断要效率低的多,因为if语句很容易能得出结果。
通过双重判断,当s对象存在时,不需要再进行锁状态的判断了,所以效率高。另外扩展一下,这种双重判断加锁也有缺点,你可以扩展阅读下链接那个资料能更好的理解它
http://www.infoq.com/cn/articles/double-checked-locking-with-delay-initialization/
回复 使用道具 举报
好高端的问题....
回复 使用道具 举报
收下这篇
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马