两个线程使用相同的对象但修改了对象的seprate属性

时间:2017-02-22 07:04:50

标签: java multithreading

我的课程如下所述:

 public class Test {
     public Test1 a;
     public Test2 b;
 }

现在我有2个帖子。

线程1修改" Test1"和线程2修改" Test2"

是否存在数据损坏的可能性,即线程1正在修改" Test1" class,但inbetween thread 2进来并开始修改" Test2"因此更改丢失或数据损坏/不完整更新?

2 个答案:

答案 0 :(得分:1)

在您描述的场景中,不会有任何数据损坏,因为两个修改范围是不相交的。仅当一个线程尝试访问另一个线程正在修改的数据时,才会出现问题。修改Test1不会影响TestTest2

答案 1 :(得分:1)

非常简单:当多个帖子写入共享数据时;然后存在数据损坏的可能性。当一个主题,其他时,读者可能会看到不一致的数据。

在你的例子中,情况似乎并非如此。

反之亦然:如果对字段a的任何修改以任何方式影响字段b;然后你遇到了问题。

但除此之外:拥有由外部组件处理的公共字段是不好的方式。需要更新a时;那么这应该通过对Test对象的方法调用来实现。

除此之外:不要忘记Single Responsibility Principle!构成“一”类的东西密切相关。因此,在同一个班级中拥有这两个完全独立的东西听起来也很奇怪......