マルチスレッド環境では、一つのデータや手続きを同時に複数のスレッドが利用しようと することがある。このとき、一方のスレッドがあるデータを操作したことで他のスレッド が利用するデータが破壊されてしまうことがある。 プログラムで、このようなことが起きないように作られている場合、これを 「スレッドセーフ」であるという。
例、 変数には「クラス変数」「インスタンス変数」「ローカル変数」があり、「ローカル変数」 はスタック領域に、「クラス変数」「インスタンス変数」はヒープ領域に置かれる。 ヒープ領域の変数は、他のスレッドにより破壊される危険性があり、安全な変数として 扱われるのは、ローカル変数のみ。対象のサーブレットクラス(doPost()メソッドや doGet()メソッドが定義されているクラス)で利用している変数が全てローカル変数ならば、 それは変数の面でスレッドセーフであるといえる。
|