質問を言い換えると:異なるスレッド間にjava.sql.Connection
を実装するクラスのインスタンスを共有しないでください。java.sql.Connectionスレッドは安全ですか?
答えて
JDBCドライバが仕様に準拠している場合、技術的にはオブジェクトはスレッドセーフですが、接続上のアクティビティは1つのスレッドしか実行できないため、スレッド間の接続を共有しないでください一度に何か。
各スレッドが独自の接続を確保するには、接続プール(Apache Commons DBCPなど)を使用する必要があります。
java.sql.Connectionはインターフェイスです。したがって、すべてがドライバの実装に依存しますが、一般的には、異なるスレッド間で同じ接続を共有したり、接続プールを使用したりしないようにしてください。また、プール内の接続数がワーカースレッド数よりも多いこともお勧めします。
インタフェースは契約であり、契約*はすべての実装がスレッドセーフでなければならないと指定できます。これは、java.sql.Connectionの場合とは異なります。 –
はい、インタフェースは契約であり、契約を記述するドキュメントにいくつかの追加要件を設けることができますが、java.sql.Connectionのドキュメントではスレッドセーフの要件が定義されていないと述べています。安全は、厳密に記述され強制されるものではありません。実装は依然として契約に違反していることがあります(間違って、場合によっては、例えばIdentityHashMapなど)。 –
@AndreyAdamovich: "プール内の接続数がワーカースレッドの数よりも多いことをお勧めします"なぜですか?私は接続プールで多くの接続がある場合、スラッシングの問題に終わります。 –
PooleddatasourceのWebsphere文キャッシュにArrayOutOfBoundsExceptionがあり、そのキャッシュを無効にする必要がありました。
私たちはそれ自体をブロックしていた治療を受けました。
そのすべては、接続への現在のアクセスのため、実際の生活習慣による結論は、あなたがそれをしてはならないということです。
は、これはかなり古いスレッドですが、Microsoft SQL Serverをについての答えを探している人のために、ここでの答えである:
SQLServerConnectionは、単一の接続から作成されたが、複数のステートメントをスレッドセーフではありませんが同時スレッドで同時に処理することができます。
と
SQLServerConnectionは、SQL ServerへのJDBC接続を実装しています。
ステートメントは共有できますが、接続はできません。各スレッドで接続が必要な場合は、スレッドプールを使用できます。
は、スレッドセーフではありませんので、自動コミット・フラグへのアクセスを同期しない例はPostgresの実装についてhere
- 1. ブーストメッセージキューのスレッドは安全でプロセスは安全ですか?
- 2. ConcurrentDictionaryでAddOrUpdateスレッドは安全ですか?
- 3. SKNodeスレッドは安全ですか?
- 4. Netty Channel.close()スレッドは安全ですか?
- 5. dk.brics.automatonパッケージのスレッドは安全ですか?
- 6. Hunspellスレッドは安全ですか?
- 7. apc_store()スレッドは安全ですか?
- 8. Java:メソッドのスレッドは安全ですか?
- 9. console.writelineスレッドは安全ですか?
- 10. Django Rest Frameworkスレッドは安全ですか?
- 11. MSXML4スレッドは安全ですか?
- 12. work_queueスレッドは安全ですか?
- 13. スウィフトカレンダーのstuctスレッドは安全ですか?
- 14. libuvスレッドは安全ですか?
- 15. TStringListスレッドは安全ですか?
- 16. static final char []スレッドは安全ですか?
- 17. UIFontスレッドは安全ですか?
- 18. スレッドの違い安全で非同期シグナル安全
- 19. Djangoとスレッドの安全性
- 20. スレッド安全な方法
- 21. シングルトンとスレッドの安全性
- 22. スプリングとスレッドの安全性
- 23. libuv:uv_closeとスレッドの安全性
- 24. Azure DocumentClientスレッドの安全性
- 25. クォーツジョブリスナーのスレッドの安全性
- 26. MSVC errnoスレッドの安全性
- 27. VirtualQueryとスレッドの安全性
- 28. Reduxの「スレッドの安全性」?
- 29. C#のスレッドの安全性
- 30. UIスレッドの安全性
続きを読みます。 –
私の頭の後ろの声で、JDBC仕様ではすべてのjava.sqlオブジェクトがスレッドセーフである必要がありますが、その参照は見つかりません。 – skaffman
あなたの声はhttp://java.sun.com/j2se/1.3/docs/guide/jdbc/spec/jdbc-spec.frame9.htmlを参照してください。「私たちはすべてのjava.sqlオブジェクトはマルチスレッドセーフであり、複数のスレッドが同時に同じオブジェクトを呼び出すことで正しく対処することができます。 – janko