一个简单的例子:

      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/

10-10 01:48