本帖最后由 小熊星座 于 2014-5-7 18:56 编辑
在学习同步代码块和同步函数的过程中,用它们写了同一个例子,为什么结果不一样呢?
Wo31运行的结果是100 100 200 200 300 300 ,Wo32运行的结果却是100 200 300 400 500 600 。
我哪里写错了?求帮助,给解释解释。
- //例子:银行有一个金库,两个储户分别存300元,每次存100,存3次。
- class Bank
- {
- private int sum;
-
- public synchronized void add(int n)
- {
- sum=sum+n;
- try
- {
- Thread.sleep(10);
- }
- catch(Exception e)
- { }
- System.out.println(sum);
-
- }
-
- }
- class Depositor extends Thread
- {
- Bank b=new Bank();
- public void run()
- {
- for(int x=0;x<3;x++)
- {
- b.add(100);
- }
- }
- }
- class Wo31
- {
- public static void main(String[]args)
- {
- Depositor d1=new Depositor();
- Depositor d2=new Depositor();
- d1.start();
- d2.start();
-
- }
- }
复制代码
- //例子:银行有一个金库,两个储户分别存300元,每次存100,存3次。
- class Bank
- {
- private int sum;
- Object obj=new Object();
- public void add(int n)
- {
- synchronized(obj)
- {
- sum=sum+n;
-
- try
- {
- Thread.sleep(10);
- }
- catch(Exception e)
- { }
- System.out.println(sum);
- }
- }
-
- }
- class Depositor implements Runnable
- {
- Bank b=new Bank();
- public void run()
- {
- for(int x=0;x<3;x++)
- {
- b.add(100);
- }
- }
- }
- class Wo32
- {
- public static void main(String[]args)
- {
- Depositor d=new Depositor();
- Thread t1=new Thread(d);
- Thread t2=new Thread(d);
- t1.start();
- t2.start();
-
- }
- }
复制代码 |