我的课程如下所述:
public class Test {
public Test1 a;
public Test2 b;
}
现在我有2个帖子。
线程1修改" Test1"和线程2修改" Test2"
是否存在数据损坏的可能性,即线程1正在修改" Test1" class,但inbetween thread 2进来并开始修改" Test2"因此更改丢失或数据损坏/不完整更新?
答案 0 :(得分:1)
在您描述的场景中,不会有任何数据损坏,因为两个修改范围是不相交的。仅当一个线程尝试访问另一个线程正在修改的数据时,才会出现问题。修改Test1
不会影响Test
或Test2
。
答案 1 :(得分:1)
非常简单:当多个帖子写入共享数据时;然后存在数据损坏的可能性。当一个主题写,其他读时,读者可能会看到不一致的数据。
在你的例子中,情况似乎并非如此。
反之亦然:如果对字段a
的任何修改以任何方式影响字段b
;然后你遇到了问题。
但除此之外:拥有由外部组件处理的公共字段是不好的方式。需要更新a
时;那么这应该通过对Test
对象的方法调用来实现。
除此之外:不要忘记Single Responsibility Principle!构成“一”类的东西密切相关。因此,在同一个班级中拥有这两个完全独立的东西听起来也很奇怪......