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

时间:2019-11-17 01:03:00

标签: java multithreading thread-safety

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

1 个答案:

答案 0 :(得分:3)

您将几个完全不同的东西混淆在一起:

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

  • 通常,在一个“节点”上运行的“线程”不能(也不会)干扰由不同“节点”上的某个线程操纵的内存数据对象。

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

  • 的信息
  • 最后, IF 您正在执行“数据库更新”,而 IF “并发”则是一个问题...那么您可能想要执行更新DB transaction中的(s)。

    “交易”是ACID

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