我試圖爲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