私のアプリケーションでは、MySQLデータベースに挿入しようとしている複数のスレッドがあります。
3 に答える
メソッド自体はスレッド セーフである可能性がありますがexecuteUpdate
、準備済みステートメントは同時に使用するようには設計されていません。これはexecuteUpdate
、パラメータを MySQL に送信するように指示するまで、各インスタンスがパラメータを保存するためです。さらに、トランザクションはConnection
オブジェクトを介して管理されるため、同期せずに同時に接続を共有すると、コミット/ロールバックで望ましくない動作が発生する可能性があります。
複数のスレッドからの挿入を同時に機能させるには、各スレッドが独自の を使用し、独自Connection
の を作成する必要がありますPreparedStatement
。同時実行性は RDBMS 側で管理されるため、同じデータベースで複数のプリペアド ステートメントを同時に使用することはスレッド セーフです。
Javadocには、Connection,
aPreparedStatement,
またはaのいずれかResultSet
がスレッドセーフであるとは書かれていないため、どちらのメソッドもスレッドセーフではありません。
executeUpdate()
複数のスレッドに使用するのはスレッドセーフではありません。
各スレッドがデータベースへの独自の JDBC 接続を使用するように、複数の接続を作成できます。