以下jdbcTemplate更新脚本是线程安全的吗?它的作用基本上是:
balance -= amount;
以下是代码:
String sql = "update player.playerbalance b set b.balance = (b.balance - ?) where b.id = ? and b.balance >= ?";
jdbcTemplate = new JdbcTemplate(dataSource);
int i = jdbcTemplate.update(
sql,
new Object[] {wager, playerBalance.getId(), wager});
如果同时发生此类两次更新会怎样?
谢谢,
答案 0 :(得分:0)
它与线程安全性无关。该调用应该是线程安全的。
DBMS将足够聪明,以确保在同一记录的另一次更新进入之前完成一次更新(除非您已将其设置为非常低的隔离级别)。因此,如果两个线程(或进程等)两次调用相同的方法(使用相同的余额ID),则相同的记录将被扣除两次。