0

セッションへのオブジェクトの追加はスレッドセーフですか?

私のjspファイルで、セッションにオブジェクトが含まれていないかどうかを確認しています。次に、DBから取得してセッションに入れます。

この操作はスレッドセーフですか (複数のリクエストが同じコード行に同時に到達した場合)?

4

2 に答える 2

0

sessionId に基づく単一のセッション (ユーザーまたは接続用) がある場合でも、特定のセッション内でそのユーザーから任意の数の同時要求を開始できます。たとえば、DB からセッションにオブジェクトを追加するコードを記述したのと同じ JSP ファイルをユーザーがロードしている場合があります。

以下は、何を書いているかを示すコードの例です。

object = session.getAttribute("key");
if (object == null) {
   object = getObjectFromDB();
   session.setAttribute("key", object);
}

スレッドの切り替えは上記のコード セグメントのどの行でも発生する可能性があるため、複数のスレッドがobjectasに気づきnull、オブジェクトをセッションに入れようとする可能性があります。session.setAttribute(key,value)同じキーで を呼び出すたびに既存の値が上書きされるため、エラーはスローされません。

getObjectFromDB()ただし、ビジネス要件を検討し、不必要に複数回呼び出すことがビジネス上の期待に問題を引き起こしているかどうかを確認する必要があります。

于 2013-11-04T07:52:05.790 に答える