一个简单的例子:
class Account{
private String account_name;
private String password;
private double balance;
public synchronized double getBalance(){
return balance;
}
public synchronized void setBalance(double add){
balance += add;
}
}
根据我的理解,获取与对象关联的锁并不会阻止其他线程访问该对象。它们必须是相同的锁以防止访问。
因此,如果两个人尝试在不同的 ATM 上访问同一个帐户,那么它将创建此
Account
对象的两个不同实例,对吗?那么它就没有用相同的锁保护,对吗?假设人 A(线程 A)试图将钱存入账户,而同时人 B(线程 B)试图获得账户的总余额。
它是如何工作的 ?他们是否在使用时缓存
Account
以便在下一个请求到来时返回相同的 Account
对象? 最佳答案
同步方法将锁定对象实例。但是,如果有一个方法,它不是同步的并发访问就可能发生。
ATM 机不会访问您的帐户 - 银行服务器会。 ATM 机只是一个客户端。因此,从 2 个不同的 ATM 访问同一个帐户将受到银行服务器的保护,它的内存/数据库中只有该帐户的一个实例(可能受到某种锁定机制的保护,而不是用 Java 编写的)。
关于java - ATM在并发环境下是如何工作的,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12236897/