使Java类线程安全

时间:2016-02-09 10:14:48

标签: java multithreading thread-safety

我试图理解如何使Java类线程安全。

package com.test;

public class ThreadBean {

    private int x;

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }
}

为了做到这一点,我需要创建另一个生成线程的程序(假设有两个线程),然后两个线程中的每一个都使用setX()设置值。当使用getX()读取值时应该能够看到不一致,这要归功于上面的ThreadBean类不是线程安全的。这可能是一个简单的案例,但这只是为了我的理解。请指教。谢谢

1 个答案:

答案 0 :(得分:0)

如果来自不同线程的重叠调用无法使类的任何实例处于无效状态,则类是“线程安全的”,并且重叠调用无法将类的静态数据保留为无效状态。

您的ThreadBean类没有任何静态数据,并且只有一个实例变量。

ThreadBean实例的可能状态是什么?哪些州有效,哪些无效?如何对任何方法重叠调用会使ThreadBean处于无效状态? (提示:保证int变量的赋值是原子的。)

如果您的ThreadBean成员名为xy,并且他们之间需要一些关系,x必须始终小于y,那么您的问题会更有趣{1}}