Reputation: 323
Take this ConcurrentDouble
class definition as an example:
public class ConcurrentDouble {
public double num = 0;
public void subtract(double num) {
this.num -= num;
}
public void add(double num) {
this.num += num;
}
}
Now if I did the following,
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
}
}
We know the number starts off at 0
, and we expect it to have 0
at the end. Is it possible that the number becomes -5.0
or 5.0
?
Upvotes: 0
Views: 72
Reputation: 692181
Yes, it's possible. -=
and +=
are not atomic operations. And even then, the JVM doesn't guarantee that a write to a double is atomic.
Upvotes: 3