http://i.stack.imgur.com/D01ja.png
所以,我正在阅读有关同步的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;
}
我不明白这是如何解决这个问题的。也许这不是预期的,但似乎暗示了。我正在寻找一些关于它是否存在的确认。 }
答案 0 :(得分:3)
synchronized
关键字确保两个线程无法同时进入[同一对象]的同步块。
在您的情况下,不能同时在同一个对象上调用3个方法,因为每个方法在调用时都会对this
保持锁定。
所以,balance += amt;
不是原子的 - 它是同步的,因此在评估这个陈述期间,状态不可能发生变化。
答案 1 :(得分:1)
使用synchronized关键字的意义在于,一次只有一个线程可以访问该方法,并且图像上的架构变得不可能。
但是如下所述,setBalance方法的存在可以滥用类并获得不需要的输出。
答案 2 :(得分:0)
如果PDF提出最终解决方案,因为它完全无法解决显示图像的问题,我会感到惊讶! 也许它会向你展示一个天真的尝试来解决问题,通过一点点喷涂同步关键词?
我会继续阅读您的PDF - 并发布您的发现!