use*_*598 7 java spring transaction-isolation isolation-level
我有一个关于@Transactional注释如何单独管理代码和事务执行的问题.给定一个正确设置的Spring应用程序和以下代码:
@Transactional
public void withdraw(int amount) {
if(isEnoughFunds(amount)) {
decreaseFunds(amount);
}
}
Run Code Online (Sandbox Code Playgroud)
是否可能发生以下情况:
如果这是可能的,你会如何防止这种情况?
是的,这是可能的,具体取决于隔离级别。为了防止这种情况,您可以在调用 ifEnoughFunds() 之前显式地从数据库获取读锁。锁将在事务结束时释放。在这种情况下,线程 B 将始终等待线程 A 的事务提交后再进行检查。
| 归档时间: |
|
| 查看次数: |
1946 次 |
| 最近记录: |