すべてのアカウントが同期されていると、自分のコードに競合状態が存在するのはなぜですか?どのように競合状態がありますか?
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();
}
そのfromAccount(トーマス)をロックし、transfer2はそのfromAccount(マティアス)をロックしますので、彼らの両方がデッドロックに終わるべきではないtransfer1私の理解から、?
デッドロックや競合状態がありますか?あなたは両方に言及しますが、彼らは異なっています。潜在的なレースをしているように見えますが、一目見てデッドロックではありません。 – Brick