0

私はJavaで課金ソフトウェアを開発しています。私のアプリケーションでは、ユーザーが請求書を作成するためのウィンドウを開きます。

ウィンドウが開くと、 がフェッチされ、テーブル から がMaxID返され、 に表示されます。ユーザーが毎回請求を開始すると、請求書番号は になります。このシステムは、シングル ユーザー アプリケーションで正常に動作します。long MaxID+1INVOICEJlabelMaxID+1

しかし、このアプリケーションを複数のコンピューターで実行すると、大きな問題が発生します。たとえば、2 人のユーザーが同じウィンドウを同時に開くと、userOne同じ. その結果、両方とも同じ請求書番号にデータを入力します。どうすればこれを解決できますか?userTwoMaxID+1

助けてください。

4

1 に答える 1

1

競合状態の古典的なシナリオ。MaxId へのアクセスを同期する必要があります。データベースに基づいてInvoice、MaxId にアクセスする前にテーブルをロックし、取得したらロックを解除する必要があります。MaxId の取得はアトミックである必要があります。

于 2013-02-22T12:14:23.957 に答える