プロが教える店舗&オフィスのセキュリティ対策術

通常、一つのServletに対して、同一のsession idで(一つのクライアントで)複数並列処理します。

しかし、それじゃ都合が悪いので、一つのServletに対してはsession id毎に一つのスレッドしか発生しないようにしたいと思っています。ただ、あるスレッドが処理している最中にリクエストを受け付けたら、既に動いているスレッドを強制終了させて、後のリクエストのみを処理させたいと思っています。

が、なかなかいい案が思い浮かばず苦悩しています。

要求条件を整理すると次のようになります。
・一つのServletに対して、一つのsession idで一つのスレッドだけしか処理しないようにしたい。
・最後に受け付けたリクエストを活かし、処理中のスレッドは終了させたい。

二つ目の条件を満たすためには、一時的に二つのスレッドが発生することになると思っています。

皆様のお知恵をおかしください。

A 回答 (1件)

ThreadGroup(スレッドグループ)を使うのはどうでしょうか?


詳細は、ThreadGroupクラスのリファレンスを見てください。


スレッドグループを取得し、現在のアクティブなスレッドを取得もしくは
破棄し、カレントのリクエストをいかす。というような処理をすれば、
この2点は実現できそうな気がします。

ちなみに、

現在のスレッドからスレッドグループを取得する方法は、

ThreadGroup grp = Thread.currentThread().getThreadGroup()で行えます。

あとは、スレッドグループからアクティブなスレッド数や
スレッドの参照取得、等いろいろ制御ができるので、
これを応用してこの2点を実現できそうな気がしますが。

アドバイスになりましたでしょうか?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!