私はその目的のためにB. に口座Aからの送金を実行する必要がで私のような同期ブロックの何か使用シナリオがあります。このアプローチは、トランザクションの罰金ですJavaのマルチスレッド - 銀行業務アプリケーション
public void transaction(Account A , Account B , Number Amount){
Synchronized(this){
A - amount;
B + amount;
commit;
}
}
をAからBまでの間にあるが、問題は他のすべてのトランザクションもブロックすることである。 すなわち、トランザクションA→Bが実行されている間に、同時にC→Dのトランザクションもブロックされます。 理想的には、A-> B間のトランザクションは、トランザクションC-> Dに影響してはなりません。
Javaではどのようにこのシナリオを処理できますか? 返信いただきありがとうございます。
は、なぜあなたは、このような悪いフォーマットされたコードを投稿しますか?あなたのコードを理解することをより困難にしないでください。編集され、修正されました。 –
https://docs.oracle.com/javase/tutorial/essential/concurrency/index.html - ここから始めてください。 –
@HovercraftFullOfEelsは単にアカウントをモニターとして使用するだけではなく、デッドロックを引き起こす可能性があります。 AがBに資金を転送し、Bが同時にAに金銭を振り替えると、スレッド1はAを、スレッド2はBをロックし、スレッド1はBをロックしようとするが、スレッド2はすでにロックしており、スレッド2はAをロックしようとしているすでにロックしています - >デッドロックです。常に低いIDでアカウントをロックする場合は、最初に –