2012-04-18 12 views
1

サーブレットはスレッドセーフではありません。したがって、クラスの静的関数を使用する場合、複数の要求が同時に発生するとどうなりますか。彼らはどのように静的関数に対処しますか?サーブレットで静的クラスを使用する

答えて

4

共有され、変更可能なデータにアクセスする場合は、同期する必要があります。データが不変または読み込み専用であるかスタック上にある場合は、正常でなければなりません。

+1

Javaでbase64を使用している場合、静的メソッドencodeBase64(byte [])があります。私がこの関数に直接アクセスすると、問題がないでしょうか? – Ashwin

+0

静的関数はクラスのすべてのオブジェクトに共通なので、これを求めています。したがって、そのコピーは1つしかありません。 – Ashwin

+0

共有され、変更可能なデータは、常に静的であるかどうかを保護する必要があります。 – duffymo

1

ステートレスであるかどうかは、どのような静的メソッドを持っているかによって異なります。ステートレスで、メソッドのスコープ外のものを参照していない場合はスレッドセーフです。

+1

javaでbase64を使用している場合、静的メソッドencodeBase64(byte [])があります。私がこの関数に直接アクセスすると問題はありませんか?どうして? – Ashwin

+0

静的関数はクラスのすべてのオブジェクトに共通なので、私はこれを求めています。したがって、そのコピーは1つしかありません。 – Ashwin

0

あなたは、彼らがアクセス方法

を同期変更または使用いけない場合、変数の状態が を変更したり、静的変数を使用することができたときに、彼らが唯一のローカル変数を使用し ことにより、スレッドセーフにする必要があり、サーブレットに静的メソッドを使用している場合、 SingleThreadModleインターフェイスを実装するか、または 'synchronize'コンストラクトを使用して、関数のスレッドセーフであることができます。

関連する問題