6

私たちのアプリケーションでは、ユーザーがコマンドリンクをクリックすると、ポップアップが生成されます。このクリックにより、処理する ID が渡されます。

私の管理対象 Bean はビュースコープであり、いくつかのタスクを実行するスレッドを作成しています。

ユーザーがリンクをクリックすると、ポップアップが生成され、スレッドがジョブの実行を開始したシナリオで、ユーザーがポップアップを閉じて、今回は別の ID を提供するリンクをクリックしようとしたとします。私の問題は、開始された前のスレッドが破棄されていないことです。最新の ID の詳細を応答として取得できますが、前のスレッドは引き続きジョブを実行します。

新しいリクエストで前のインスタンス スレッドを終了する方法があるかどうかを知りたいです。sessionscoped を使用してこれを達成できることはわかっていますが、同じセッションでポップアップが開かれています。

4

1 に答える 1

1

ユースケースで可能な迅速な解決策と同じように:

  • リクエストごとに新しいスレッドを作成するのではなく、スレッドプールを使用します(スレッドプールのアイデアはより効率的であり、標準APIで提供されているため)
  • 次に、プール内の実行中のスレッドを簡単に停止できます。私が見つけたソリューション: http://www.coderanch.com/t/234197/threads/java/stopping-runnable-ThreadPoolExecutor => 質問には、スレッドプール実装のサンプルが含まれており最初の答えはあなたに解決策を与えます

呼び出し:

boolean cancel(boolean mayInterruptIfRunning)

あなたの場合、呼び出しは次を使用する必要があります:

mayInterruptIfRunning=true

残っている唯一の質問は、Future 参照をどこに保持するかということです。:)
必要に応じて、それについても話し合うことができます :)

于 2012-08-25T10:51:07.950 に答える