黑马程序员技术交流社区

标题: 多线程中的单例问题 [打印本页]

作者: 安阳    时间: 2013-8-22 00:59
标题: 多线程中的单例问题

  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>
复制代码
这种单例有什么缺陷?


作者: 白堇翎    时间: 2013-8-22 11:17
  1. private Object obj = new Object();
复制代码
首先这一行代码不知道是做什么用的
其次就算加入了2个if判断 执行效率还是不如饥汉式
作者: straw    时间: 2013-8-22 20:07
如果要考虑到多线程的话你上面的代码还是不能解决问题的,如果我在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. }
复制代码





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