2017-03-10 4 views
0

私は、アプリケーション自体で作成できるスレッドとは異なるWeb要求を、どのように概念的に考えていますか?jackson webサーブレットはスレッドセーフですか?

java-jackson(rest apis)アプリケーションのさまざまなHTTPRequestsは、Webサーバーによって自動的に同期されますか?スレッドは、スレッドと同じ問題を抱えていますか?これらの要求はスレッドに似ていませんか、これらのWeb要求を処理しているさまざまなクラスの状態を妨げる可能性がありますか?あるいは、これはアプリケーション開発者が自分で管理しなければならないものですか?つまり、これらのjacksonサーブレットを同期させるか、そうでなければスレッドセーフにする必要がありますか?彼らはシングルスレッドであるかのように

答えて

1

サーブレットを記述する必要があります

感謝。入ってくる各HTTPリクエストは別のスレッドで処理されます。

つまり、はありません。サーブレットクラスで共有可能な状態です。

サーブレットにプライベートデータメンバーがなく、渡されたパラメータまたはローカルオブジェクトですべての操作が実行される場合は、スレッドセーフです。同期は必要ありません。

共有状態はスレッドセーフである必要があります。

1

参照: How are Threads allocated to handle Servlet request?

これは、サーブレットJSRに指定されていませんが、通常はJ2EE Webサーバは、ユーザの要求を処理するためにスレッドを1つ使用します。

あなたのサーブレットのインスタンスを1つ使用しているサーブレット=>多くのスレッドがサーブレットの1つのインスタンスを使用しています。デッドロックやパフォーマンスの問題を回避するには

は、サーブレットコードを同期していない、彼らスレッドセーフとステートレス作る:JSRサーブレット3.0 http://download.oracle.com/otndocs/jcp/servlet-3.0-fr-eval-oth-JSpec/

要求処理をスペック How do servlets work? Instantiation, sessions, shared variables and multithreading

参照してください。メソッド 基本的なサーブレットインタフェースは、クライアント要求を処理するためのサービスメソッドを定義します。 このメソッドは、サーブレットコンテナがサーブレットの インスタンスにルーティングする要求ごとに呼び出されます。 Webアプリケーションへの同時要求の処理では、一般に、 Web Developerが、複数のスレッドを処理できるサーブレットを特定の時間にサービスメソッド 内で実行するように設計する必要があります。 一般に、Webコンテナは、 異なるスレッド上のサービスメソッドの同時実行によって、同じサーブレットへの同時要求を処理します。

+0

素晴らしいリンク、ありがとう! – Tintin

関連する問題