初步认识竞态条件

298 阅读1分钟

竞态条件(Race Condition):由于不恰当的执行时序而出现不正确的结果。

最常见的竞态条件类型就是“先检查后执行(Check-Then-Act)”操作,即通过一个可能失效的观测结果来决定下一步的动作。

例如

public class LazyInit {
    private Object instance = null;
    
    public Object getInstance() {
        if (instance == null)
            instance = new Object();
        return instance;
    }
}

要避免竞态条件问题,就必须在某个线程修改该变量时,通过某种方式防止其他线程使用这个变量,从而确保其他线程只能在修改操作完成之前或之后读取和修改状态,而不是在修改状态过程中。