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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 李红亮 于 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

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

2 个回复

倒序浏览
本帖最后由 张洪慊 于 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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报

问题解决了,谢了哈。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马