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
Multithreading 多线程环境下的表更新_Multithreading_Asynchronous_Transactions_Spring Transactions - Fatal编程技术网

Multithreading 多线程环境下的表更新

Multithreading 多线程环境下的表更新,multithreading,asynchronous,transactions,spring-transactions,Multithreading,Asynchronous,Transactions,Spring Transactions,我有一张桌子,上面写着积分。它有下面几列 Copmany Credit points Amount A 100 50 B 200 94 C 250 80 有多个线程将更新此表。有一种方法可以读取信用点,并进行一些计算和更新金额以及信用点。这一计算将需要相当长的时间 假设线程A读取并正在进行一些计算。同时,在A写回之前,线程B正在从表中读取数据,以

我有一张桌子,上面写着积分。它有下面几列

Copmany Credit points   Amount

A            100              50
B            200              94
C            250              80
有多个线程将更新此表。有一种方法可以读取信用点,并进行一些计算和更新金额以及信用点。这一计算将需要相当长的时间

假设线程A读取并正在进行一些计算。同时,在A写回之前,线程B正在从表中读取数据,以进行计算和更新数据。这里我丢失了线程更新的数据。在许多情况下,由于多个线程正在读取和更新该表,信用积分和金额将不同步

我们可以在这里做的一件事是使用同步方法。 我正在考虑使用spring事务。spring事务线程安全吗?对于这一点,还有什么好的选择? 非常感谢您的帮助


注意:我正在使用ibatis(ORM)和MySQL。

您肯定需要事务来确保根据以前读取的数据进行更新。此事务必须包括读写操作。 要确保多个线程协作,您不需要同步,但有两个选项:

  • 悲观锁定:使用select进行更新。这将设置一个锁,该锁将在事务结束时释放
  • 乐观锁定:在更新过程中,您会发现数据同时发生了更改,如果是这样,您必须重复读取和更改。在更新声明中,您不仅可以搜索公司(我希望是主键),还可以搜索前面阅读的金额和“信用积分”,从而实现这一点

这两种方法都有各自的优点。我建议您在完成此应用程序之前熟悉这些概念。一旦出现重负,如果你做错了什么,你的金额和信用点可能会被错误计算

您肯定需要事务来确保根据以前读取的数据进行更新。此事务必须包括读写操作。 要确保多个线程协作,您不需要同步,但有两个选项:

  • 悲观锁定:使用select进行更新。这将设置一个锁,该锁将在事务结束时释放
  • 乐观锁定:在更新过程中,您会发现数据同时发生了更改,如果是这样,您必须重复读取和更改。在更新声明中,您不仅可以搜索公司(我希望是主键),还可以搜索前面阅读的金额和“信用积分”,从而实现这一点

这两种方法都有各自的优点。我建议您在完成此应用程序之前熟悉这些概念。一旦出现重负,如果你做错了什么,你的金额和信用点可能会被错误计算

使用spring事务解决了我的问题。感谢您使用spring事务解决了我的问题。谢谢你,阿舒尔克