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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 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. }
复制代码

效率哪个比较好,有什么区别、

5 个回复

正序浏览
第一个是同步函数,第二个是同步代码块,还在学习中
回复 使用道具 举报
支持2楼
回复 使用道具 举报
支持2楼的答案
回复 使用道具 举报
#下面方法更高效,因为当多个线程同时访问getInstance()方法时,第一种方法每次都得判断锁,但是第二种方法只有在不为空时,在进行锁判断,更高效#
回复 使用道具 举报 3 0
同步函数使用的固定锁this。
同步代码块使用的锁是可以指定的。

JDK1.5以后出现了更好的方案
Lock接口替代了synchronized  
Condition接口替代了Object中的监视方法,并将监视器方法封装成了Condition
和以前不同的是,以前一个锁上只能有一组监视器方法。现在,一个Lock锁上可以多组监视器方法对象。
回复 使用道具 举报 2 0
您需要登录后才可以回帖 登录 | 加入黑马