ないが、なぜ、彼らは、インスタンス変数が非スレッドセーフであると言います。サーブレットでのインスタンス変数はスレッドセーフ
私はあまりこの文を理解していません。たとえば、私はActionServlet.java
という名前のサーブレットを持っています。各ユーザーの要求がサーバーに送信されるたびに、コンテナは新しいスレッドを作成し、新しいActionServlet
インスタンスを作成します。これらすべてのスレッドがActionServlet
のための新しいクラスのインスタンスを作成しますので、
public class ActionServlet extends HttpServlet {
// example of instance variable
Instance variable;
public void processRequest(HttpServletRequest request, HttpServletResponse response) {
// process something relating to instance variable
}
}
ので、私はここに何の問題が表示されていない。
ActionServlet
は、構造を有しているかもしれません。これらのスレッドのインスタンスは互いに分離されているためです。マルチスレッド環境でのインスタンス変数を使用する場合
どこに問題を把握してください。
感謝:)
同じオブジェクトの同じメソッドを2つのスレッドから呼び出すことについて考えてみましょう。 –
@DanielFischer 1)これらの変数はプライベートです2)このスレッドのオブジェクトは常に他のスレッドとは異なります(私は思います)。私は上記のサンプルコードを持っています。もっと明瞭に教えてください。 – hqt
@hqt:コンテナは、サーブレットの一意のインスタンスを作成し、それをグローバルデータ構造(マップなど)に格納し、要求が到着するたびに、リクエストのパスに基づいて適切なサーブレットを取得します。マップから取得し、そのサービスメソッドを呼び出します。サーブレットのフィールドがプライベートであるという事実は影響を与えません。容器はそれらについて気にしない。 –