我有以下场景。 我有两张 table 。一个存储作为事务计数器的多个值。通过 Java 应用程序,第一个表的值被读取、递增并写入第二个表,以及新值被写回第一个表。显然,这是一个多用户系统,因此有可能出错。 在 Java 中,我对这个问题的解决方案是提供锁,这些锁必须,嗯,应该,在对任一表执行任何操作之前获取。这些锁 ReentrantLocks 是静态的,表 1 中的每一列都有一个锁,因为值彼此完全独立。
这是推荐的方法吗?
干杯。
最佳答案
否。为数据库并发使用隐式数据库锁1。关系数据库支持事务,这是 ACID 的重要组成部分: 使用它们。
以 Java 为中心的锁不会跨 VM 工作,因此在多用户/服务器环境中无济于事。
1 数据库足够智能,可以获取/释放锁以确保一致性和隔离性,甚至可以使用“无锁”实现,例如 MVCC。在极少数情况下必须请求显式数据库锁定,但这是一个高级用例。
关于java - 使用 Java 锁实现数据库并发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12790593/