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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 安阳 中级黑马   /  2013-8-22 00:59  /  1287 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


  1. <P>class SingleDemo{
  2. private static SingleDemo s = null;
  3. private SingleDemo(){}
  4. private Object obj = new Object();
  5. public static SingleDemo getIntance(){ </P>
  6. <P>  if(s == null) {
  7.    synchronized(SingleDemo.class) {
  8.     if (s == null){
  9.      s = new SingleDemo();
  10.     }
  11.    }
  12.   }
  13.   return s;
  14. }
  15. }</P>
复制代码
这种单例有什么缺陷?

2 个回复

倒序浏览
  1. private Object obj = new Object();
复制代码
首先这一行代码不知道是做什么用的
其次就算加入了2个if判断 执行效率还是不如饥汉式
回复 使用道具 举报
如果要考虑到多线程的话你上面的代码还是不能解决问题的,如果我在synchronized块中添加Thread.sleep(10000);的话照样还是出现多线问题!所以这种方式同样是不安全的.还不如使用恶汉式:
  1. class SingleDemo{
  2. private static SingleDemo s = new SingleDemo();
  3. private SingleDemo(){}
  4. public static SingleDemo getIntance(){
  5.   return s;
  6. }
  7. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马