JavaサーブレットQ&A LV2
■ このスレッドは過去ログ倉庫に格納されています
0893デフォルトの名無しさん
NGNG> でも、サーブレットのクラス(用語があるのかどうか知らないけど、
> doGet()とかを実装するクラス)の中のフィールドっていうのは
> 全部のアクセス(例えば5人そのサーブレットを起動したらその
> 5人全員)から使われるので注意、って感じのことが本に書いて
> あったんですが、これは要するに同じインスタンスがみんなに
> 使われる、ってことですか?
その通り。
だからServletのクラスはスレッドセーフでなければならない。
スレッドセーフを実現するための方法は大きく分けて二つ。
synchronizedを使った同期を行なう方法と、オブジェクト自体を
不変なものにする方法。Servletでは後者を使う。
具体的には、Servletのクラスではメンバ変数を用いないようにすることで
スレッドセーフを実現している。
「メンバ変数がない = 状態を持たない = 不変なオブジェクト」
ってことね。
じゃあ、計算途中の状態などをどうやって格納するかというと、
その都度適当なオブジェクトをnewしてやればいい。
個々のスレッドで独自にnewしたオブジェクトなんだから、
他のスレッドからのアクセスされる心配はない。
■ このスレッドは過去ログ倉庫に格納されています