http://i.stack.imgur.com/D01ja.pngJava银行账户同步示例。未能看到解决方案如何工作
所以,我正在阅读关于显示上述示例问题的同步的PDF。稍后,提出以下内容,推测为解决方案:
class Account
{
private double balance;
public Account(double initialDeposit) {
balance = initialDeposit;
}
public synchronized double getBalance() {
return balance;
}
public synchronized void setBalance(double newBalance) {
balance = newBalance;
}
public synchronized void deposit (double amt) {
//essentially still multiple steps when in bytecode!
balance += amt;
}
我不明白这是如何解决问题的。也许这不是意图的,但似乎暗示。我正在寻找一些确认它是否存在。 }
线程获得锁定,获取平衡。线程二获取锁,抓住平衡。 – user1015682 2012-04-16 22:27:36
我还是不明白。如果在调用getBalance()和setBalance()之间放弃锁定,则在该间隔期间仍然会发生任何事情。 – user1015682 2012-04-16 22:37:08
您应该使用存款方式。如果你使用getBalance,做你的数学,然后使用setBalance,它显然会失败的同步目的是确保存款是一个原子动作。 – assylias 2012-04-16 22:37:45