- java并发编程实战中的解释:
当计算的正确性取决于多个线程的交替执行时序时,那么就会发生竟态条件。
直接读来感觉不是那么直观,明白之后感觉再读感觉就理解了,直白的说就是如果一段程序被多个线程执行,线程执行的先后顺序不一致会导致最终的状态(结果)不同,我们就称这段代码有竟态条件。最常见的竟态条件类型就是“先检查后执行(Check-Then-Act)”操作,即通过一个可能失效的观测结果来决定下一步的动作
比如下面这段代码,如果一个线程在执行完赋值inst指令之后,另一个线程才读取了inst的值,那结果就是输出2与3;如果一个线程还没执行赋值给inst的指令前,另一个线程就先读取了inst,那导致数据的结果就会变成了2与2;很明显第二种就是竟态条件导致的错误。
例:
public class RaceDemo {
private int inst= 1;
public void increase() {
inst=inst+1;
System.out.println(inst);
}
}