Tôi có một lớp được gọi là "Tài khoản"tại sao phương pháp đồng bộ hóa này không hoạt động như mong đợi?
public class Account {
public double balance = 1500;
public synchronized double withDrawFromPrivateBalance(double a) {
balance -= a;
return balance;
}
}
và một lớp được gọi là 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);
}
}
tôi tạo ra hai chủ đề, chúng tôi giả có số dư ban đầu trong tài khoản ngân hàng (1500 $)
chuỗi đầu tiên cố gắng rút 100 đô la và chuỗi thứ hai.
Tôi hy vọng số dư cuối cùng là 1300, tuy nhiên đôi khi là 1400. Ai đó có thể giải thích cho tôi lý do không? Tôi đang sử dụng các phương pháp được đồng bộ hóa ...