【Servlet】同時アクセス / 非同期処理 について

シングルインスタンス・マルチスレッド

 * 同時に複数クライアントからアクセスされる可能性があるため、マルチスレッドで動作する必要がある
 * 一方、メモリ節約やパフォーマンスの観点からたくさんのインスタンス作成するのではなく
  1つのインスタンスを使い回す(メモリ内の常駐させて使いまわす)

補足:シングルスレッドモデルについて

http://www.atmarkit.co.jp/ait/articles/0205/14/news002.html
より
 * シングルスレッドモデルで動作させることもできる(javax.servlet.SingleThreadModelにより実装可能)

ただし、以下の理由により、利用しない方が望ましい
 * Servletの並列性が下がる
 * 余分なインスタンスが作成される可能性もある

参考文献

http://www.l2tp.org/?p=324

スレッドセーフ

 * プログラムが複数スレッドから同時にアクセスされても正常に動作することをいう

対象

1) ローカル変数:YES
2) インスタンス変数:NO
3) static変数:NO
4) リクエスト属性:YES
5) セッション属性:NO(例えば、1人のユーザが複数ブラウザ起動時、HTMLのフレームを利用したページなど)
6) アプリケーション属税:NO
7) ページ属性:YES

参考文献

http://itpro.nikkeibp.co.jp/article/COLUMN/20070820/279950/

非同期処理

 * アノテーションを指定する2通りの方法がある

 1) @WebServlet
 2) @WebFilterでasyncSupported

参考文献

http://www.atmarkit.co.jp/ait/articles/1106/10/news116.html