He una clase llamada "Cuenta"¿por qué este método sincronizado no funciona como se espera?
public class Account {
public double balance = 1500;
public synchronized double withDrawFromPrivateBalance(double a) {
balance -= a;
return balance;
}
}
y una clase llamada ATMThread
public class ATMThread extends Thread {
double localBalance = 0;
Account myTargetAccount;
public ATMThread(Account a) {
this.myTargetAccount = a;
}
public void run() {
find();
}
private synchronized void find() {
localBalance = myTargetAccount.balance;
System.out.println(getName() + ": local balance = " + localBalance);
localBalance -= 100;
myTargetAccount.balance = localBalance;
}
public static void main(String[] args) {
Account account = new Account();
System.out.println("START: Account balance = " + account.balance);
ATMThread a = new ATMThread(account);
ATMThread b = new ATMThread(account);
a.start();
b.start();
try {
a.join();
b.join();
} catch (InterruptedException ex) {
ex.printStackTrace();
}
System.out.println("END: Account balance = " + account.balance);
}
}
puedo crear dos hilos, suponemos que hay un saldo inicial de la cuenta bancaria (1500 $)
el primer subproceso intenta retirar 100 $ y el segundo subproceso también.
Espero que el saldo final sea 1300, sin embargo, a veces es 1400. ¿Alguien me puede explicar por qué? Estoy usando métodos sincronizados ...