我尝试为银行账户转账的经典问题编写同步代码。现在我试图找出解决方案的问题。在我在网上找到的任何解决方案中,转移方法都使用了两个锁,但我没有使用任何一个。
class BankAccount
{
double balance;
public void synchronized deposit(double amount)
{
balance+=amount;
}
public void synchronized withdraw(double amount)
{
balance-=amount;
}
public void transferTo(BankAccount b, double amount)
{
this.withdraw(amount);
b.deposit(amount);
}
}
请告诉我可能是什么问题transferTo()
。请原谅忽略了限制检查balance
。我实际上担心不使 transferTo 原子化是否会导致问题(死锁)。这种情况的一个例子会很好。