私は、複数のスレッド(接続されたユーザーごとに1つのスレッド+いくつかの追加のスレッド)を持つJavaベースのサーバーで作業しています。データベース接続が必要になるため、サーバーがデータベースに対してSELECTクエリを実行するたびに、現在のスレッドからのブロックを防ぐために、このための新しいスレッドが開始されると考えていました。私はこれに接続プールを使用することを計画しており、その方法を知っていると思います。(C3P0を調べました)ただし、多くのUPDATEステートメントも含まれますが、これらが直接実行されることは重要ではありません。ここで遅延しても問題ありません。また、 UPDATEステートメントが多数ある可能性があるため、すべてのUPDATEに対して単一のワーカースレッドを使用することを考えています。ステートメント。PreparedStatement
私が見ているように、これにはオブジェクトを再利用できるという利点があります
質問: 他のスレッドから、UPDATE -workerスレッドにいくつかのステートメントを実行するように指示するにはどうすればよいですか?マルチスレッドと、同期ブロックを使用してスレッドを相互に「通信」させる方法については知っていますが、データベースが関係していると、突然複雑になります。プリペアドステートメントと接続はスレッド間で共有されるべきではないことを読みました。
それを解決する方法について私が今持っているアイデア:(良い解決策のようには感じません)
LinkedBlockingQueue
カスタムクラスの(または別の種類のキュー)を使用して、呼び出すUPDATEステートメントの種類と送信するパラメーターに関する情報を指定します。そして、ワーカースレッドは通知されたときにこのキューから読み取り(キューに何かが追加されたときになります)、そこで適切なプリペアドステートメントを使用する適切なメソッドを実行し、パラメーターを設定して呼び出します。
編集:私がこのアプローチで自分自身を見ているのは悪い考えです。パラメータはints、String、doubleなどである可能性があります。それらをカスタムクラスに保存する方法は?それらをすべてStringとして保存するのは気分が悪いです。
私はここで正しい方向に進んでいますか、それともこれを解決するためのより良い方法がありますか?