我有一个方法,它接收两个银行账户作为输入并交换它们的值:
Public void TransferAccount(AccountID id1, AccountID id2){
Account a1 = id1.GetAccount();
Account a2 = id2.GetAccount();
//Swap amounts.
Temp = a1.Balance;
a1.Balance = a2.Balance;
a2.Balance = Temp;
}
我想让这个方法以尽可能高的性能成为线程安全的(我想这意味着我们可能不会使方法同步),我们还必须小心死锁,
我想到了以下解决方案:
Public void TransferAccount(AccountID id1, AccountID id2){
Account a1 = id1.GetAccount();
Account a2 = id2.GetAccount();
//Swap amounts.
synchronized(a1){
wait(a2);
synchronized(a2){
Temp = a1.Balance;
a1.Balance = a2.Balance;
a2.Balance = Temp;
}
}
}
在性能方面有更好的实现吗?顺便说一句,这是线程安全的吗?