2017-07-20 10 views
0

を転送します。このソウルシップは、一度に複数の転送を処理できないため、素朴です。どのようにすれば、このメソッドが複数の要求を処理し、同時実行環境で安全であることを保証できますか?Javaは、私はこのようなコードを持っているお金のサービスと同時実行の問題

+0

メソッドは複数のリクエストを処理できません。メソッドが呼び出されます。あなたのケースでは、メソッドが同期しているので、これは順番に発生します。あなたの環境について正確には**ゼロ**を知っているので、このメソッドを並列実行するとどういうことが起こるのか理解していますか?申し訳ありませんが、この質問は広範に及ぶ方法です。 – GhostCat

答えて

2

ghostCatが述べているように、私たちはあなたのenvに精通していませんので、 "邪魔にならない"方法のいずれかが副作用がある場合、わからないでしょう。むしろ、これは非常にシンプルで簡単なコードやメソッド-名であると仮定すると、彼らがやっていることを反映して、私たちはにすべて方法を同期する必要はありませんと主張するだろう、と述べた

重要な部分:我々は平行して、この方法を実行し、寄贈者/受信機がある場合にのみ、スレッドをロックすることができますそうすることによって

synchronized (ownerAccount) { 
    withdrawFromOwnerAccount(ownerAccount, transferModel.getAmount()); 
} 
synchronized (receiverAccount) { 
    depositToReceiverAccount(receiverAccount, transferModel.getAmount()); 
} 

withdrawFromOwnerAccount(ownerAccount, transferModel.getAmount()); 
depositToReceiverAccount(receiverAccount, transferModel.getAmount()); 

我々は、アカウントを使用してこの部分を同期することができます既にexecutiの途中で別の取引。

注:このアプローチを適用するには、同じアカウントに対して2つのオブジェクトがないことを確認する必要があります。

関連する問題