黑马程序员技术交流社区
标题: 判断锁与判断与判断if否那个效率高? [打印本页]
作者: kingkeykang 时间: 2015-8-24 20:10
标题: 判断锁与判断与判断if否那个效率高?
//但是都比较低效(对锁的判断所致),可以用双重判断*来提高效率.同步锁的对象是"类名.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判断,效率上是否有提高?
作者: 夸克 时间: 2015-8-24 20:10
本帖最后由 夸克 于 2015-8-24 23:55 编辑
明显效率更高,因为不用等。你这里是不是想说虽然减少了一部分线程的加锁操作,但是所有线程都要进行if判断效率有没有提高。
看过毕老师视频,你应该记得他那个比喻,把一个锁比喻成一个房间,当有人在锁里的的时候,另一个人想进去,需要判断锁的状态,需要等那个人出来,我觉得这个过程比单纯的逻辑判断要效率低的多,因为if语句很容易能得出结果。
通过双重判断,当s对象存在时,不需要再进行锁状态的判断了,所以效率高。另外扩展一下,这种双重判断加锁也有缺点,你可以扩展阅读下链接那个资料能更好的理解它
http://www.infoq.com/cn/articles/double-checked-locking-with-delay-initialization/
作者: 杨怀伟 时间: 2015-8-25 04:36
好高端的问题....
作者: zhengsx 时间: 2015-11-4 23:09
收下这篇了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |