ページの先頭行へ戻る
Interstage Application Server/Interstage Web Server J2EE ユーザーズガイド

7.2.2 スレッド・モデル

JavaTM Servlet APIでは、マルチスレッド・モデルとシングルスレッド・モデルの2つのスレッド・モデルが用意されています。
通常はマルチスレッド・モデルでサーブレットを作成します。
2つのスレッド・モデルの違いを説明します。

マルチスレッド・モデル

同時に複数の実行スレッドが動作することができますので、多重アクセスの対応に適しています。
メソッドやインスタンス変数をスレッド間で共有し、Servletコンテナによる排他制御が行われません。
そのため、変数の競合を避けたい場合は、メソッドやインスタンス変数をsynchronized宣言する、ローカル変数とするなどのアプリケーションによる制御を行ってください。

シングルスレッド・モデル

同時に複数の実行スレッドは動作せず、メソッドやインスタンス変数の競合を避けるため、Servletコンテナによる排他制御が行われます。
そのため、後続のリクエストは実行中のサーブレットの処理が終了するまで待ち状態となります。
多重アクセスに対応する場合には不向きです。

マルチスレッド・モデルの適用例

以下にマルチスレッド・モデルを利用したDBアクセスの適用例を示します。



WebブラウザAからのリクエストで確立したコネクションIDをインスタンス変数に格納します。
WebブラウザBからのリクエストでは、インスタンス変数に格納されているコネクションIDを利用します。
コネクションIDを共有することにより、2回目以降のデータベースへのアクセスの高速化が実現します。