Java 两个线程使用相同的对象,但正在修改对象的seprate属性
我的课程如下所述:Java 两个线程使用相同的对象,但正在修改对象的seprate属性,java,multithreading,Java,Multithreading,我的课程如下所述: public class Test { public Test1 a; public Test2 b; } 现在我有两个线程 线程1修改“Test1”,线程2修改“Test2” 是否存在数据损坏的可能性,即当线程1修改“Test1”类时,但中间线程2进入并开始修改“Test2”类因此,更改丢失或数据损坏/更新不完整?在您描述的场景中,不可能存在任何数据损坏,因为两个修改范围是不相交的。只有当一个线程试图访问另一个线程正在修改的数据时,才会出现问题。修
public class Test {
public Test1 a;
public Test2 b;
}
现在我有两个线程
线程1修改“Test1”,线程2修改“Test2”是否存在数据损坏的可能性,即当线程1修改“Test1”类时,但中间线程2进入并开始修改“Test2”类因此,更改丢失或数据损坏/更新不完整?在您描述的场景中,不可能存在任何数据损坏,因为两个修改范围是不相交的。只有当一个线程试图访问另一个线程正在修改的数据时,才会出现问题。修改
Test1
不会影响Test
或Test2
在您描述的场景中,不可能存在任何数据损坏,因为两个修改范围是不相交的。只有当一个线程试图访问另一个线程正在修改的数据时,才会出现问题。修改Test1
不会影响Test
或Test2
非常简单:当多个线程写入共享数据时;那么就有可能发生数据损坏。当一个线程写入,而另一个线程读取,则读者看到不一致数据的可能性最大
在你的例子中,情况似乎并非如此
或者反过来说:如果对字段a
的任何修改以任何方式影响字段b
;那你就有麻烦了
但除此之外:使用由外部组件处理的public字段是一种糟糕的风格。当a
需要更新时;然后,这应该通过对Test
对象的方法调用来实现
除此之外,别忘了这件事!构成“一”类的事物是密切相关的。因此,将这两个完全独立的东西放在同一个类中听起来也很奇怪…很简单:当多个线程写入共享的数据时;那么就有可能发生数据损坏。当一个线程写入,而另一个线程读取,则读者看到不一致数据的可能性最大 在你的例子中,情况似乎并非如此 或者反过来说:如果对字段
a
的任何修改以任何方式影响字段b
;那你就有麻烦了
但除此之外:使用由外部组件处理的public字段是一种糟糕的风格。当a
需要更新时;然后,这应该通过对Test
对象的方法调用来实现
除此之外,别忘了这件事!构成“一”类的事物是密切相关的。因此,将这两个完全独立的东西放在同一个类中听起来也很奇怪…您这样想有什么原因吗?您这样想有什么原因吗?“当多个线程写入共享数据时”--实际上,当一个线程修改另一个线程正在读取的数据时,我认为我的说法是正确的;但他遗漏了一些东西。马上改变,谢谢你,幽灵猫。我确实使用了私有字段和getter&setter。上面的代码只是一个示例。谢谢你的回答。类Test1和Test2是独立的,任何一个线程的修改都不会影响另一个线程。“当多个线程写入共享数据时”——实际上是当一个线程修改另一个线程正在读取的数据时。我认为我的说法是正确的;但他遗漏了一些东西。马上改变,谢谢你,幽灵猫。我确实使用了私有字段和getter&setter。上面的代码只是一个示例。谢谢你的回答。类Test1和Test2是分离的,任何一个类的修改都不会影响另一个类。