大家好我有這樣的代碼:爲什麼這不正確同步?
public class ThreadTester {
public static void main(String args[]) {
Counter c = new Counter();
for (int i = 0; i < 10; i++) {
MyThread a = new MyThread(c);
MyThread b = new MyThread(c);
a.start();
b.start();
}
System.out.println("The value of the balance is " + c.getVal());
}
}
class MyThread extends Thread {
private Counter c;
public MyThread(Counter c){ this.c = c; }
public void run(){ s.increment(); }
}
class Counter {
private int i = 100;
public synchronized void increment(){ i++; }
public synchronized int getVal(){ return i; }
}
現在,我認爲這應該給的120所希望的結果 - 但是結果似乎115和120之間波動。如果我添加一個Thread.sleep(1)
後b.start()
我總是120的理想結果。爲什麼會發生這種情況?
它真的被迷惑了我,我想感謝所有幫助我能得到,謝謝
編輯戰爭以改善答案。伊馬讓你贏得加入/閂鎖......你打我:) – 2013-05-10 20:48:09
這不是一場戰爭。只是想給出一個很好和完整的答案。 – 2013-05-10 20:49:59
我的意思是我們都在不斷修改以增加更多細節,並不是說它必然是一場競賽,但它最終看起來就像它。 – 2013-05-10 20:50:30