0

データベースの挿入を実行する Web サービスにメソッドがあります。そのメソッドへの単一アクセスが必要なため、メソッドを同期化しました。しかし、このメソッドに対して複数の呼び出しが同時に行われた場合、即時同期オプションは機能しませんでした。メソッドの構造は次のようになります

public synchronized void display() {
   //DataBase updations and Transactions.    
}

この問題を回避できる解決策を誰でも提案できますか。

4

3 に答える 3

0

問題はメソッドではなく、このメソッドを含むコードの複数のインスタンスにあります。

于 2012-10-19T11:24:21.110 に答える
0

同期が機能しないことをどのように判断しますか?同期はオブジェクトレベルで機能することを知っているので、メソッドがサーブレット内にあり、サーブレットコンテナがこのサーブレットの複数のインスタンスを作成する場合、運が悪いことになります。各サーブレットインスタンスは「同期」メソッドを同時に実行できます。

また、なぜDB操作をコードでシリアル化したいのですか?どのDBもそれを完全に実行できます。トランザクションとACIDの原則。

乾杯、

于 2012-10-19T11:25:33.860 に答える
0

次のことを試していただけますか -

  1. 挿入、削除、テーブルの作成など、すべてのデータベース操作を処理する別のクラスを作成します。

  2. すべてのメソッドを同期させます。

  3. このクラスは、コード内で一度初期化する必要があります。

  4. このクラスの外部でデータベース接続を作成し、その接続をこのクラスに設定します (このセッター メソッドは同期する必要があります)。データベースを扱う上記のクラスのオブジェクトのようなコードで、接続を一度作成する必要があることに注意してください。

  5. 次に、このクラスの同じオブジェクトを複数のスレッドで使用します。それはうまくいくはずです。

于 2012-10-19T12:20:19.293 に答える