黑马程序员技术交流社区

标题: synchronized放在函数内,与放在方法签名中有什么区别? [打印本页]

作者: szsycwb    时间: 2014-5-19 22:01
标题: synchronized放在函数内,与放在方法签名中有什么区别?
本帖最后由 szsycwb 于 2014-5-20 12:54 编辑
  1. public static synchronized Single getInstance()
  2. {
  3.      if(instance==null)            
  4.        instance=new Single();
  5.       return instance;
  6. }
复制代码

-------------------------------------------------------------------------------------------------
  1. public static Single getInstance()
  2. {
  3.       if(instance==null)               
  4.       synchronized(Single.class)
  5.       {        
  6.         if(instance==null)               
  7.            instance=new Single();
  8.       }
  9.       return instance;
  10. }
复制代码

效率哪个比较好,有什么区别、
作者: 莫问纷飞    时间: 2014-5-19 22:18
同步函数使用的固定锁this。
同步代码块使用的锁是可以指定的。

JDK1.5以后出现了更好的方案
Lock接口替代了synchronized  
Condition接口替代了Object中的监视方法,并将监视器方法封装成了Condition
和以前不同的是,以前一个锁上只能有一组监视器方法。现在,一个Lock锁上可以多组监视器方法对象。
作者: 郝义涛    时间: 2014-5-19 23:48
#下面方法更高效,因为当多个线程同时访问getInstance()方法时,第一种方法每次都得判断锁,但是第二种方法只有在不为空时,在进行锁判断,更高效#
作者: jsjchenlong    时间: 2014-5-20 07:44
支持2楼的答案
作者: lvc    时间: 2014-5-20 16:32
支持2楼
作者: 阿布Yocan    时间: 2014-5-20 19:24
第一个是同步函数,第二个是同步代码块,还在学习中




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