2012-01-11 4 views
1

複数のスレッドがMySQLデータベースを更新しようとしていますか? executeUpdateメソッドはスレッドセーフで使用できますか?JavaスレッドセーフでexecuteUpdateメソッドがある

+0

さらに詳しい情報http://stackoverflow.com/questions/1272453/jdbc-fundamental-concepts-pooling-and-threading –

+2

複数のスレッドがある場合は、複数の接続を使用する必要があります。そのような単純な。 – bestsss

+0

スレッドの安全性について心配することに加えて、同時データベースアクセス(トランザクション)も考慮する必要があります。 –

答えて

3

はありません、それが使用するスレッドセーフではありませんがデッドロック。

実際には、他のスレッドが文を使用し、別のスレッドがexecuteUpdate()を呼び出すと、他のスレッドのResultSetがある場合は閉じます。 JavaDoc for java.sql.Statement (of which PreparedStatement is a subtype) "Statementインタフェース内のすべての実行メソッドは、現在のStatementの現在のResultSetオブジェクトが暗黙的に閉じられます。

さらに、executeUpdate()の実装では、マルチスレッドセーフであるとは考えられません。

ステートメントと結果セットのすべての使用を同期化するか、複数の接続を作成して、各スレッドが独自のJDBC Connectionをデータベースに使用するようにする必要があります。後者をお勧めします。

+0

接続プールを使用しますが、 – jbindel

0

はsynchronizedキーワードを使用してupdateメソッドを作る考慮し、あなたの同時実行スレッドを考える

関連する問題