Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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 在多线程应用程序中,如何防止一个线程修改已被另一个线程修改的数据_Java_Multithreading_Thread Safety - Fatal编程技术网

Java 在多线程应用程序中,如何防止一个线程修改已被另一个线程修改的数据

Java 在多线程应用程序中,如何防止一个线程修改已被另一个线程修改的数据,java,multithreading,thread-safety,Java,Multithreading,Thread Safety,假设我在3个节点上部署了一个应用程序,每个节点上都有一个线程试图同时获取和更新相同的数据记录。只能从中央数据库获取和更新数据。建立数据库连接的方法是线程安全的。在这种情况下,是否可能修改数据并导致不一致?如果是,我们如何解决这个问题?您将几个完全不同的事情混为一谈: 一般来说,为了保护“线程”之间的“数据”,可以使用“锁”。Java中保护数据的一种方法是使用 一般来说,在一个“节点”上运行的“线程”不能——也不会——干扰内存中的数据对象,这些数据对象是由另一个“节点”上的某个线程操作的 “数据

假设我在3个节点上部署了一个应用程序,每个节点上都有一个线程试图同时获取和更新相同的数据记录。只能从中央数据库获取和更新数据。建立数据库连接的方法是线程安全的。在这种情况下,是否可能修改数据并导致不一致?如果是,我们如何解决这个问题?

您将几个完全不同的事情混为一谈:

  • 一般来说,为了保护“线程”之间的“数据”,可以使用“锁”。Java中保护数据的一种方法是使用

  • 一般来说,在一个“节点”上运行的“线程”不能——也不会——干扰内存中的数据对象,这些数据对象是由另一个“节点”上的某个线程操作的

  • “数据库访问”带来了完全不同的问题。特别是,阅读有关

  • 最后,如果您正在进行“数据库更新”并且“并发性”是一个问题。。。然后,您可能希望在数据库中执行更新

    “交易”是指:

    • 原子的
    • 一致性
    • 隔离
    • 耐久性

标准解决方案是使用数据库事务并在单个事务中执行获取/更新。如果操作正确,两个执行获取/更新的客户端将被序列化。而不是baeldung.com。