多线程环境中的数据不一致错误

时间:2015-03-09 17:48:05

标签: multithreading synchronization

假设一个类有两个变量:a和b。 现在在该类中,我正在更新Synchnonized块中的两个变量的值,并再次以不同的方法更新这两个变量的值。

现在有两个线程正在访问这个类。它会导致数据不一致错误???

例如:

    class ABC {
    int a = 9, b = 18;

    public void method1() {
        synchronized (this) {
            a += 10;
            b += 12;
        }
    }

    public void method2() {
        a += 18;
        b += 23;
    }
}

两个线程一次访问此对象。会发生什么 ?是否会在这里发生数据一致性?

1 个答案:

答案 0 :(得分:0)

当一个线程正在运行method2()时,没有任何内容阻止另一个线程通过method1()。由于+=不是原子操作,因此您会遇到并发问题。