Java MultiThreading银行应用程序

时间:2017-02-04 10:37:41

标签: multithreading

我对Java MultiThreading有疑问。假设我有一个银行应用程序。我们说我有一个像下面这样的控制器。

public class BankAccount{

private String bankaccount;

private long balance;

getBalance(String bankaccount){

//code to get balance based on bankaccount number

this.balance=value; //value is the balance i get from database

}

updateAccount(long value){

 balance=balance-value;

//code to store balance in database
}

让我们说我在spring应用程序中使用了上面的代码 我有一个场景,对于一个特定的帐号,余额是10000.丈夫和妻子都试图从2个不同的ATM从同一帐户提取金额。由于服务器内部使用多线程,因此上述方案需要同步。我有以下怀疑

1)上述2个请求将创建BankAccount类的2个不同对象或仅创建一个对象。

2)如果它只创建一个对象,服务器如何识别不同的帐号并为其创建另一个对象,因为更新一个帐号不应阻止更新其他帐号。

1 个答案:

答案 0 :(得分:0)

  1. 实施一个只为每个帐号创建一个BankAccount实例的解决方案是有意义的。

  2. 您可以使用synchronized关键字分别同步对每个BankAccount实例的访问权限。例如:

    BankAccount account = new BankAccount("1234567890");
    synchronized (account) {
        //perform a transaction here
        account.updateAccount(100);
    }
    

    这样,只有一个线程可以进入同步块,而其他线程将阻塞,直到第一个线程存在块为止。