java.sql.Connectionのスレッドは安全ですか?
-
20-09-2019 - |
質問
問題を修正してくださいするには:私は別のスレッド間java.sql.Connection
を実装するクラスのインスタンスを共有することは避けてください。
解決
JDBCドライバが仕様に準拠している場合には、技術的にはい、オブジェクトはスレッドセーフですが、接続上の活動が一つだけのスレッドが何かをできるようになることを意味しますので、あなたは、スレッド間で共有接続を避けるべきです一度ます。
あなたはそれを確実にするために(のApache CommonsのDBCP のような)接続プールを使用する必要があります各スレッドは、独自の接続を取得します。
他のヒント
のjava.sql.Connectionインタフェースです。だから、それはすべてのドライバの実装に依存するが、一般的に、あなたは異なるスレッドと使用接続プールの間で同じ接続を共有することは避けてください。また、それはまた、ワーカースレッドの数よりも高く、プール内の接続数を持つことをお勧めします。
これはかなり古いスレッドですが、Microsoft SQL Serverのについての答えを探している人のために、ここでの答えは次のとおりです。
SQLServerConnectionは、並行スレッドで同時に処理することができる単一の接続から作成された安全な、しかし、複数の文をスレッドではありません。
と
SQLServerConnectionは、SQL ServerへのJDBC接続を実現します。
上記のすべてから、あなたが文を共有しなく接続し、場合にあなたが各スレッドで接続を必要とすることができ、あなたは、スレッドプールを使用することができます。
のhref = "http://static.javadoc.io/com.microsoft.sqlserver/mssql-jdbc/6.1.6.jre8-preview/com/microsoft/sqlserver/jdbc/SQLServerConnection.html# <続きを読みますcreateStatement--」のrel = "nofollowをnoreferrer">ここの
Oracleの JDBCおよびマルチスレッドのドキュメント:
すべてのOracle JDBC APIメソッドが同期化されているので、2つのスレッドが同時に接続オブジェクトを使用しようとすると、、そして一つは、他の1は、その使用を終了するまで待つことを余儀なくされます。
だから、オラクルの場合には安全かもしれないが、同時アクセスがボトルネックに苦しむでしょう。
私たちは、それのpooleddatasourceのWebsphereの文キャッシュにArrayOutOfBoundsExceptionを持っていた、と私たちはそのキャッシュを無効にする必要がありました。
私たちは自分自身をブロックして治療を受けています。
なぜなら現在の接続へのアクセスなので、実際の生活習慣によって結論のすべてのことは、あなたがそれをしないしなければならないということです。