私はこれを使用しています:Spring MVC(Controller + Service + ThreadPoolTaskExecutor)、Callable、およびFuture。
@Controller
launch-method [invokes Service:launch-method and get result with Future]
stop-method [invokes Service:stop-method]
@Service [to launch async Tasks]
launch-method [Loop with threadPoolTaskExecutor.submit(callable)]
stop-method [threadPoolTaskExecutor.shutdown()]
私が持っている停止イベントフローは次のとおりです。
- ユーザーが停止ボタンをクリックしてコントローラーを呼び出す: stop-method
- Controller: stop-methodがService: stop - method を呼び出す
- ?Service: stop-method shutdownと通知Controller: launch-method
そして、プロセスが終了したことをController: launch-methodに通知するために、ステップ 3 をコーディングする必要があります。
threadPoolTaskExecutor.shutdown() がController: launch-methodを解放しない理由がわかりません。これは次で待機しています: result = future.get(); 例外は発生しません。
try {
for (Future<String> future : sentResult) {
result = future.get();
...
}
} catch (ExecutionException e) {...}
catch (InterruptedException e) {...}
catch (CancellationException e) {...}
catch (Exception e) {...}
なにか提案を?