ich ein Szenario, wo in ich muss Weisung von Konto A nach B Zu diesem Zweck ich etwas synchronisierten Block dergleichen durchführen: istJava Multithreading - Banking Anwendung
public void transaction(Account A , Account B , Number Amount){
Synchronized(this){
A - amount;
B + amount;
commit;
}
}
für Transaktion feinen Dieser Ansatz zwischen A bis B, aber das Problem ist: Es blockiert auch alle anderen Transaktionen. , d. H. Während die Transaktion A -> B läuft, wird gleichzeitig die Transaktion zwischen C -> D ebenfalls blockiert. Idealerweise sollte die Transaktion zwischen A-> B die Transaktion C-> D nicht beeinflussen.
Wie kann dieses Szenario in Java behandelt werden? Vielen Dank im Voraus für die Antwort.
Warum würden Sie so schlecht formatiert PLZ? Bitte machen Sie es nicht schwerer, Ihren Code zu verstehen. Bearbeitet und behoben. –
https://docs.oracle.com/javase/tutorial/essential/concurrency/index.html - hier sollten Sie beginnen. –
@HovercraftFullOfEels verwenden nicht einfach Account als Monitor, der einen Deadlock verursachen kann. Wenn A Geld an B transferiert und B Geld an A gleichzeitig transferiert: Thread 1 sperrt A, Thread 2 sperrt B, Thread 1 versucht B zu sperren, aber Thread 2 sperrt bereits, Thread 2 versucht A, aber Thread 1 zu sperren bereits gesperrt -> Deadlock. Sie können es tun, wenn Sie immer das Konto mit der niedrigeren ID zuerst sperren –