如果程序运行顺序的改变会影响最终结果,这就是一个竞态条件(race condition)。
例如:两个线程执行下面的方法
class Counter {
protected long count = 0;
public void add(long value) {
this.count = this.count + value;
}
}
线程1:t1.add(2);
线程2:t2.add(3);
如果按顺序执行,线程2执行之后count变量应该为5,但是如果两个线程同时进入,就会分别加上2,3 。最后写入的值为最后写入内存的值。
个人公号:【排骨肉段】,可以关注一下。