我对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)如果它只创建一个对象,服务器如何识别不同的帐号并为其创建另一个对象,因为更新一个帐号不应阻止更新其他帐号。
答案 0 :(得分:0)
实施一个只为每个帐号创建一个BankAccount
实例的解决方案是有意义的。
您可以使用synchronized
关键字分别同步对每个BankAccount
实例的访问权限。例如:
BankAccount account = new BankAccount("1234567890");
synchronized (account) {
//perform a transaction here
account.updateAccount(100);
}
这样,只有一个线程可以进入同步块,而其他线程将阻塞,直到第一个线程存在块为止。