我试图为BankAccount转账的经典问题编写同步代码。现在我正试图找出解决方案的问题。在网络上找到的任何解决方案中,传输方法使用了两个锁,但我没有使用任何锁。java同步银行账户转账
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
的限制检查。我实际上担心是否不将原子转移到原子会导致问题(死锁)。这种情况的一个例子会很好。
那么一个错误是在那里的单词'双'。 – Antimony 2012-08-16 04:57:14
为什么会出现双重问题? – 2012-08-16 05:15:45
如果你没有得出结果,你可以得到一个舍入误差,有些人认为这是不可接受的。使用'长'美分或'BigDecimal'是一个很好的选择。我发现在大多数情况下,结果是四舍五入的。 – 2012-08-16 05:18:56