69

java.sql.Connection質問を言い換えると、異なるスレッド間で実装するクラスのインスタンスを共有しないようにする必要がありますか?

4

5 に答える 5

75

JDBC ドライバーが仕様に準拠している場合、技術的にはそうです。オブジェクトはスレッドセーフですが、スレッド間で接続を共有することは避ける必要があります。接続上のアクティビティは、一度に 1 つのスレッドしか実行できないことを意味するためです。 .

接続プール ( Apache Commons DBCP など) を使用して、各スレッドが独自の接続を取得できるようにする必要があります。

于 2009-10-07T11:40:50.543 に答える
14

java.sql.Connection はインターフェースです。したがって、それはすべてドライバーの実装に依存しますが、一般に、異なるスレッド間で同じ接続を共有することは避け、接続プールを使用する必要があります。また、プール内の接続数をワーカー スレッド数よりも多くすることもお勧めします。

于 2009-10-07T11:47:07.930 に答える
1

プールされたデータソースの Websphere ステートメント キャッシュで ArrayOutOfBoundsException が発生し、そのキャッシュを無効にする必要がありました。

それ自体をブロックする治療を受けました。

そのすべては接続への現在のアクセスによるものであり、実生活での実践による結論は、それを行ってはならないということです。

于 2017-09-28T21:20:15.173 に答える