我试图理解如何使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类不是线程安全的。这可能是一个简单的案例,但这只是为了我的理解。请指教。谢谢
答案 0 :(得分:0)
如果来自不同线程的重叠调用无法使类的任何实例处于无效状态,则类是“线程安全的”,并且重叠调用无法将类的静态数据保留为无效状态。
您的ThreadBean
类没有任何静态数据,并且只有一个实例变量。
ThreadBean
实例的可能状态是什么?哪些州有效,哪些无效?如何对任何方法重叠调用会使ThreadBean
处于无效状态? (提示:保证int
变量的赋值是原子的。)
如果您的ThreadBean
成员名为x
和y
,并且他们之间需要一些关系,x
必须始终小于y
,那么您的问题会更有趣{1}}