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

© HM何伟 中级黑马   /  2013-4-1 23:11  /  1517 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 HM何伟 于 2013-4-2 00:25 编辑

这段代码有安全问题没??
  1. class Single{
  2.          private Single(){}
  3.          private static Single s=null;
  4.          public static Single getOop()
  5.          {
  6.                 synchronized(Single.class)
  7.                 {                                
  8.                         if (s==null)//?????????
  9.                
  10.                         try
  11.                                 {
  12.                                   Thread.sleep(20);
  13.                                 }
  14.                                 catch (Exception e)
  15.                                 {
  16.                                 }
  17.                                 
  18.                                 s=new Single();
  19.                           return s;
  20.                 }
  21.                  //return s;
  22.          }
  23. }
  24. class Test implements Runnable{
  25.         public void run()
  26.         {
  27.           while(true)
  28.          {
  29.                 Single s = Single.getOop();
  30.                    System.out.println(s);
  31.          }
  32.         }
  33. }
  34. class Main{

  35.         public static void main(String[] args){
  36.                            Test t=new Test();
  37.                         Thread t1=new Thread(t);
  38.                         Thread t2=new Thread(t);
  39.                         Thread t3=new Thread(t);
  40.                         t1.start();
  41.                         t2.start();
  42.                         t3.start();
  43.                  
  44.         }
  45. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

4 个回复

正序浏览
黑马李超 发表于 2013-4-1 23:46
if (s==null)//?????????if的大括号呢,没有大括号,if不能判断,程序会不停new Single对象的
          ...

明白了,难怪地值会一直不一样
回复 使用道具 举报
记得及时处理帖子哦~
回复 使用道具 举报
   if (s==null)//?????????if的大括号呢,没有大括号,if不能判断,程序会不停new Single对象的
               
                        try
                                {
                                  Thread.sleep(20);
                                }
                                catch (Exception e)
                                {
                                }
                                
                                s=new Single();
                          return s;

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马