猿问

高性能 Springboot 银行应用设计

我试图在springboot中做一个涉及多线程的项目。


在银行应用程序,我可以像操作doWithdrawal()如synchronized以保持帐户的完整性,但我无法弄清楚如何在只有特定帐户的水平做到这一点。


由于不同账号的用户应该可以同时进行提款,所以用我当前的代码doWithdrawal()将使所有操作同步,而不考虑账号。


目前我在下面有非常基本的功能,我已经将一个账户的提款作为一项synchronized操作使用。我想要一个场景,不同的账户持有人可以同时从自己的账户中提款,但同时从同一个账户中多次提款,只有这个过程应该是同步的。


所以我在这里寻找的是应用程序应该如何设计为具有这样的功能,我知道我们可以@Async用于异步操作,但不确定它如何适合同一帐户的提款应该是同步但不同的场景异步。


Account.java


public 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;

    }



}


红颜莎娜
浏览 154回答 1
1回答

饮歌长啸

您可以在该特定的“accountNum”上进行同步,而不是在整个方法上进行同步,如下所示: public void doWithdrawal(int accNum) {    synchronized(accountMap.get(accNum)) {        // now perform withdrawal    } }这样,您只会在帐号相同时进行同步。
随时随地看视频慕课网APP

相关分类

Java
我要回答