Spring JdbcTemplate是更新原子?

时间:2014-02-17 13:07:38

标签: spring jdbc jdbctemplate

以下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});

如果同时发生此类两次更新会怎样?

谢谢,

1 个答案:

答案 0 :(得分:0)

它与线程安全性无关。该调用应该是线程安全的。

DBMS将足够聪明,以确保在同一记录的另一次更新进入之前完成一次更新(除非您已将其设置为非常低的隔离级别)。因此,如果两个线程(或进程等)两次调用相同的方法(使用相同的余额ID),则相同的记录将被扣除两次。