java - 使用 Java 锁实现数据库并发

标签 java database concurrency

我有以下场景。 我有两张 table 。一个存储作为事务计数器的多个值。通过 Java 应用程序,第一个表的值被读取、递增并写入第二个表,以及新值被写回第一个表。显然,这是一个多用户系统,因此有可能出错。 在 Java 中,我对这个问题的解决方案是提供锁,这些锁必须,嗯,应该,在对任一表执行任何操作之前获取。这些锁 ReentrantLocks 是静态的,表 1 中的每一列都有一个锁,因为值彼此完全独立。

这是推荐的方法吗?

干杯。

最佳答案

否。为数据库并发使用隐式数据库锁1。关系数据库支持事务,这是 ACID 的重要组成部分: 使用它们。

以 Java 为中心的锁不会跨 VM 工作,因此在多用户/服务器环境中无济于事


1 数据库足够智能,可以获取/释放锁以确保一致性和隔离性,甚至可以使用“无锁”实现,例如 MVCC。在极少数情况下必须请求显式数据库锁定,但这是一个高级用例。

关于java - 使用 Java 锁实现数据库并发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12790593/

相关文章:

multithreading - 将向量复制到线程

java - 无法在 Java 子类中访问 Parent Kotlin 类的 protected 成员变量

java - Selenium webdriver 无法点击页面外的链接

java - Spring security 在 AWS ThinkPHP 请求上部署了应用程序

database - 将SolrCloud与RDBMS结合使用或将Solr用作主要数据存储

python - 我可以在 Future 中使用 ProcessPoolExecutor 吗?

java - 在哪里放置 Maven 参数化 junit 输入 xml 文件

sql-server - 大表的 SQL Server 性能

mysql - 我应该如何构建这个 MySQL 查询?

for-loop - 在 Go 中使用由 'for' 循环创建的 channel