• 締切済み

Servletのスレッドを終了させたい

通常、一つのServletに対して、同一のsession idで(一つのクライアントで)複数並列処理します。 しかし、それじゃ都合が悪いので、一つのServletに対してはsession id毎に一つのスレッドしか発生しないようにしたいと思っています。ただ、あるスレッドが処理している最中にリクエストを受け付けたら、既に動いているスレッドを強制終了させて、後のリクエストのみを処理させたいと思っています。 が、なかなかいい案が思い浮かばず苦悩しています。 要求条件を整理すると次のようになります。 ・一つのServletに対して、一つのsession idで一つのスレッドだけしか処理しないようにしたい。 ・最後に受け付けたリクエストを活かし、処理中のスレッドは終了させたい。 二つ目の条件を満たすためには、一時的に二つのスレッドが発生することになると思っています。 皆様のお知恵をおかしください。

みんなの回答

回答No.1

ThreadGroup(スレッドグループ)を使うのはどうでしょうか? 詳細は、ThreadGroupクラスのリファレンスを見てください。 スレッドグループを取得し、現在のアクティブなスレッドを取得もしくは 破棄し、カレントのリクエストをいかす。というような処理をすれば、 この2点は実現できそうな気がします。 ちなみに、 現在のスレッドからスレッドグループを取得する方法は、 ThreadGroup grp = Thread.currentThread().getThreadGroup()で行えます。 あとは、スレッドグループからアクティブなスレッド数や スレッドの参照取得、等いろいろ制御ができるので、 これを応用してこの2点を実現できそうな気がしますが。 アドバイスになりましたでしょうか?