所以,我正在阅读有关同步的 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;
}
我不明白这是如何解决问题的。也许这不是本意,但似乎是暗示的。我正在寻找一些关于它是否有效的确认。 }
最佳答案
synchronized
关键字确保两个线程不能同时进入同步块(synchronized block)[在同一对象上]。
在您的情况下,不能同时对同一对象调用这 3 个方法,因为每个方法在调用时都持有 this
锁。
因此,balance += amt;
不是原子的 - 它是同步的,因此在评估此语句期间状态不可能改变。
关于Java 银行帐户同步示例。无法看到解决方案如何工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10182207/