「java.sql.Connectionはスレッドセーフか」と聞かれたらどう答えますか。
まず、Webで調べてみると、JDBCの仕様はスレッドセーフとしているようです。実装がどうかはわかりませんが。
では、スレッドセーフだとして、マルチスレッドで使ってよいのか?
autocimmtとの関連があると思います。
- autocommit true の場合は、複数のスレッドで共有してもよさそうに思います。
- autocommit falseで、自分でcommit/rollbackする場合は、悲惨なことになりそうです。
私はこのくらいしか思い浮かばないのですが、その他に、考えなければならない要素がありますか?
答えを募集します。
スレッドセーフとトランザクションとは分けて考えるべきでしょうか?わからなくなってきました。たとえば、次のようなコードが書けると思います。これでもよいのか?
Java
1Connection conn = ... 2synchronized(conn) { 3 // データベースの更新 - 複数のSQLを実行する。 4 // データベースを commit/rollbackする。 5}
データベースセッション(トランザクション)に複数スレッドが相乗りしてもよいのか?が、質問の趣旨だったということに気づきました。質問の仕方が悪かったのでしょうか、ステレオタイプな答えしか返ってこなかったので、やる気をなくしました。
少し視野を広げてConcurrencyについて自分で調べることします。皆様ありがとうございました。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。