Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 两个线程使用相同的对象,但正在修改对象的seprate属性_Java_Multithreading - Fatal编程技术网

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是分离的,任何一个类的修改都不会影响另一个类。