gpt4 book ai didi

java - 在java中实现事务而不使用任何库(如@Transactional)

转载 作者:行者123 更新时间:2023-12-01 19:07:09 24 4
gpt4 key购买 nike

我有一个简单的应用程序,它执行以下操作:-

  1. 从一个账户提款
  2. 存入另一个帐户
private void transfer(fromAccount,toAccount, amount){
fromAccount.withdraw(amount);
toAccount.deposit(amount);
}

如果不在事务上下文中运行,上述实现是相当危险的。如何在不使用任何库或@Transactional的情况下实现事务。

最佳答案

public class YourClass() { 

private void transfer(fromAccount,toAccount, amount) {
Account fromAccountObj = new Account(fromAccount);
Account toAccountObj = new Account(toAccount);
synchronized(fromAccountObj) {
fromAccount.withdraw(amount);
}
synchronized(toAccountObj) {
toAccount.deposit(amount);
}
}
}

public class Account {
private String accountNumber;
public Account(String accountNumber) {
this.accountNumber = accountNumber;
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Account account = (Account) o;
return accountNumber.equals(account.accountNumber);
}

@Override
public int hashCode() {
return Objects.hash(accountNumber);
}
}

确保您的 equals 和 hashcode 对于相同帐号的 n 个对象返回相同的值

关于java - 在java中实现事务而不使用任何库(如@Transactional),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59529739/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com