我试图在springboot中做一个涉及多线程的项目。在银行应用程序,我可以像操作doWithdrawal()如synchronized以保持帐户的完整性,但我无法弄清楚如何在只有特定帐户的水平做到这一点。由于不同账号的用户应该可以同时进行提款,所以用我当前的代码doWithdrawal()将使所有操作同步,而不考虑账号。目前我在下面有非常基本的功能,我已经将一个账户的提款作为一项synchronized操作使用。我想要一个场景,不同的账户持有人可以同时从自己的账户中提款,但同时从同一个账户中多次提款,只有这个过程应该是同步的。所以我在这里寻找的是应用程序应该如何设计为具有这样的功能,我知道我们可以@Async用于异步操作,但不确定它如何适合同一帐户的提款应该是同步但不同的场景异步。Account.javapublic class Account { int number ; float currentBalance ; float openingBalance ; String accountHolder ; String branch ; float rateOfInterest ; public int getNumber() { return number; } public void setNumber(int number) { this.number = number; } public float getCurrentBalance() { return currentBalance; } public void setCurrentBalance(float currentBalance) { this.currentBalance = currentBalance; } public float getOpeningBalance() { return openingBalance; } public void setOpeningBalance(float openingBalance) { this.openingBalance = openingBalance; } public String getAccountHolder() { return accountHolder; } public void setAccountHolder(String accountHolder) { this.accountHolder = accountHolder; } public String getBranch() { return branch; } public void setBranch(String branch) { this.branch = branch; } public float getRateOfInterest() { return rateOfInterest; } public void setRateOfInterest(float rateOfInterest) { this.rateOfInterest = rateOfInterest; }}
1 回答
饮歌长啸
TA贡献1951条经验 获得超3个赞
您可以在该特定的“accountNum”上进行同步,而不是在整个方法上进行同步,如下所示:
public void doWithdrawal(int accNum) {
synchronized(accountMap.get(accNum)) {
// now perform withdrawal
}
}
这样,您只会在帐号相同时进行同步。
添加回答
举报
0/150
提交
取消