我試圖在springboot中做一個(gè)涉及多線程的項(xiàng)目。在銀行應(yīng)用程序,我可以像操作doWithdrawal()如synchronized以保持帳戶的完整性,但我無法弄清楚如何在只有特定帳戶的水平做到這一點(diǎn)。由于不同賬號(hào)的用戶應(yīng)該可以同時(shí)進(jìn)行提款,所以用我當(dāng)前的代碼doWithdrawal()將使所有操作同步,而不考慮賬號(hào)。目前我在下面有非常基本的功能,我已經(jīng)將一個(gè)賬戶的提款作為一項(xiàng)synchronized操作使用。我想要一個(gè)場景,不同的賬戶持有人可以同時(shí)從自己的賬戶中提款,但同時(shí)從同一個(gè)賬戶中多次提款,只有這個(gè)過程應(yīng)該是同步的。所以我在這里尋找的是應(yīng)用程序應(yīng)該如何設(shè)計(jì)為具有這樣的功能,我知道我們可以@Async用于異步操作,但不確定它如何適合同一帳戶的提款應(yīng)該是同步但不同的場景異步。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貢獻(xiàn)1951條經(jīng)驗(yàn) 獲得超3個(gè)贊
您可以在該特定的“accountNum”上進(jìn)行同步,而不是在整個(gè)方法上進(jìn)行同步,如下所示:
public void doWithdrawal(int accNum) {
synchronized(accountMap.get(accNum)) {
// now perform withdrawal
}
}
這樣,您只會(huì)在帳號(hào)相同時(shí)進(jìn)行同步。
添加回答
舉報(bào)
0/150
提交
取消