gpt4 book ai didi

java - 多线程环境中的 ACID 问题

转载 作者:行者123 更新时间:2023-11-29 06:13:13 25 4
gpt4 key购买 nike

我有一个多线程 java 应用程序,它在 MySQL 数据库上执行大量并行 CRUD 操作。正如MySQL手册中所读到的,InnoDB表结构应该确保事务按照ACID原则执行。但我仍然遇到问题,因为有时更新会丢失。这是我使用的示例存储过程之一:

DELIMITER //
CREATE PROCEDURE *** (
_*** INT,
_*** INT,
_*** INT,
_*** INT
)
BEGIN
START TRANSACTION;

UPDATE `***`
SET
`***`.`***` = `***`.`***` + _***,
`***`.`***` = `***`.`***` + _*** + _***,
`***`.`***` = DATE_ADD(NOW(), INTERVAL _*** SECOND)
WHERE `***`.`***` = _***;

COMMIT;
END;
//
DELIMITER ;

最佳答案

JDBC类是不可重入的,所以你必须同步使用连接、语句等对象实例。它们不能被多个线程同时使用。

使用连接池是简化数据库并发访问的好方法。

编辑

如果您确定线程从不使用相同的连接,您可以检查

  • 池可能会失去连接吗?这是如何处理的?
  • 是否有可能两次更新作用于同一条记录,而第一次更新被覆盖?
  • 您是否捕获所有异常并将其记录在您的工作线程中?

关于java - 多线程环境中的 ACID 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8106734/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com