- PR -

staticメソッドとスレッドセーフについて

1
投稿者投稿内容
未記入
会議室デビュー日: 2004/11/29
投稿数: 1
投稿日時: 2005-06-05 22:41
はじめまして。

SJCーWCの取得に向け勉強しているのですが、悩んでいます。
スレッドセーフについて参考書ではこう書いてありました。
「ローカル変数は必ずスレッドセーフである。」

そこで質問なのですが、
public static boolean isLogin(HttpSearvletRequest req) {
//リクエストよりクッキーを取得し
  //ログインしているかを判定する。
  //ログインしている場合trueを返す
}
このようなメソッドがあるとします。
このメソッドをstaticアクセスで呼び出した場合、
スレッドセーフは保証されるのでしょうか??

教えてください。よろしくお願いします。
Hyde
ベテラン
会議室デビュー日: 2005/05/18
投稿数: 63
投稿日時: 2005-06-05 23:01
static はクラス変数になるので絶対保証されませんよ。
しかもインスタンス変数であったとしても同期しないとやばいですよ。
前川
常連さん
会議室デビュー日: 2004/04/27
投稿数: 38
お住まい・勤務地: 1DK
投稿日時: 2005-06-05 23:51
質問の内容がはっきりしないのですが。スレッドセーフであるかどうか、ローカル変数について聞きたいのですか?メソッドの処理について聞きたいのですか?
そのメソッド内のローカル変数がスレッドセーフか、という事であればスレッドセーフです。ご覧の参考書の通り。
そのメソッドの処理がスレッドセーフか、というと(同期処理をしているようには書かれていないので)変数reqに対しスレッドセーフでは有りません。

ただし…
HttpServletRequestと言っている辺りから推測するに恐らく対象はWebアプリケーションですよね。であれば、1リクエストに対し複数スレッドがアクセスすることはまず無い(不可能ではないが全くもってお勧め出来ない)ので問題になる事は殆ど無いでしょうね。更に言うなら、1リクエストに複数スレッドでアクセスする予定が無いなら同期処理を入れても殆どパフォーマンスは劣化しません。やっておいて損は無いと思いますが、どちらなりと。

>Hydeさん

staticがついてるのは変数ではなくメソッドですよ


--------
「SJCーWCの取得に向け勉強しているのですが、」と書いてるじゃないですか…「ただし…」以降は無視してください。

[ メッセージ編集済み 編集者: 前川 編集日時 2005-06-06 16:20 ]
1

スキルアップ/キャリアアップ(JOB@IT)