黑马程序员技术交流社区

标题: 大家帮忙看看这个小程序那里出问题了(多线程的) [打印本页]

作者: 李红亮    时间: 2014-1-5 23:34
标题: 大家帮忙看看这个小程序那里出问题了(多线程的)
本帖最后由 李红亮 于 2014-1-6 09:05 编辑

程序是这样的:


class Bank
{
        private int sum;
        Object obj = new Object();
        public synchronized void add(int n)
        {
                //synchronized(obj)
                //{
                        sum = sum + n;
                        try
                        {
                                Thread.sleep(10);
                                System.out.println("sum =" + sum);
                        }
                        catch(Exception e)
                        {
                                
                        }
                //}
               
               
        }
}

class Cus implements Runnable
{
        public void run()
        {
                Bank b = new Bank();
                for(int x = 0 ; x < 3 ; x++)
                {
                        b.add(100);                        
                }
        }        
}

public class BankDemo
{
        public static void main(String[] args)
        {
                Cus c = new Cus();
                Thread t1 = new Thread(c);
                Thread t2 = new Thread(c);
                t1.start();
                t2.start();
        }
}



我运行的结果是:
sum =100
sum =100
sum =200
sum =200
sum =300
sum =300



疑问:为什么结果不是像毕老师里面的那样?
sum =100
sum =200
sum =300
sum =400
sum =500
sum =600


作者: 张洪慊    时间: 2014-1-6 00:33
本帖最后由 张洪慊 于 2014-1-6 00:36 编辑
  1. class Cus implements Runnable
  2. {            
  3.          Bank b = new Bank();//提到成员位置就OK
  4.          
  5.         public void run()
  6.         {
  7.                     //Bank b = new Bank();//局部b导致每个线程对应一个局部Bank实例,那么对add方法将起不到同步的效果(让我想起来了ThreadLocal,哈哈哈)
  8.                 //System.out.println(b);//你可以看到其字符串形式不同(多运行几次,因为不同对象也可能产生相同哈希值)
  9.                 for(int x = 0 ; x < 3 ; x++)
  10.                 {
  11.                         b.add(100);                        
  12.                 }
  13.         }        
  14. }
复制代码


作者: 李红亮    时间: 2014-1-6 09:04
张洪慊 发表于 2014-1-6 00:33

问题解决了,谢了哈。




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