为了账号安全,请及时绑定邮箱和手机立即绑定

高性能 Springboot 银行应用设计

高性能 Springboot 银行应用设计

红颜莎娜 2021-10-27 19:04:51
我试图在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

    }

 }

这样,您只会在帐号相同时进行同步。


查看完整回答
反对 回复 2021-10-27
  • 1 回答
  • 0 关注
  • 153 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信