Warum kann es in meinem Code eine Race Condition geben, wenn alle Accounts synchronisiert sind?Wie kann es eine Race Condition geben?
class Transfer implements Runnable {
Konto fromAccount;
Konto toAccount;
Integer amount;
public void run() {
synchronized (fromAccount) {
if (fromAccount.book(-amount)) {
toAccount.book(amount);
}
}
}
}
public class Main {
public static void main(String[] args) throws InterruptedException
Account thomas = new Account(1234, 100);
Account mathias = new Account(5678, 100);
Thread transfer1 = new Thread(new Transfer(80, thomas, mathias));
Thread transfer2 = new Thread(new Transfer(95, mathias, thomas));
transfer1.start();
transfer2.start();
transfer1.join();
transfer2.join();
}
Von meinem Verständnis, abfuhr1 seine fromAccount (Thomas) sperrt und transfer2 sperrt seine fromAccount (mathias), so sollten sie nicht beide enden in einer Sackgasse auf?
Haben Sie einen Deadlock oder eine Racebedingung? Sie erwähnen beides, aber sie sind verschieden. Sieht für mich so aus, als hättest du eine potentielle Rasse, aber nicht einen Stillstand auf einen kurzen Blick. – Brick