藉此ConcurrentDouble
類定義爲例:併發:改變一個變量與非同步方法
public class ConcurrentDouble {
public double num = 0;
public void subtract(double num) {
this.num -= num;
}
public void add(double num) {
this.num += num;
}
}
現在,如果我做了以下內容,
public class Test {
public static void main(String[] args) {
ConcurrentDouble d1 = new ConcurrentDouble();
Thread one = new Thread(() -> { d1.add(5); }).start();
Thread two = new Thread(() -> { d1.subtract(5); }).start();
one.join();
two.join();
System.out.println(d1.num); // <-- OUTPUT
}
}
我們知道電話號碼在0
開始了,我們預計它最後會有0
。數字有可能變成-5.0
或5.0
?
如果我們使'num'變得不穩定? – Wulf
不會有太大的改變。 + =不是原子的。寫入將被保證是原子,但。 –