1

私はこれを使用しています:Spring MVC(Controller + Service + ThreadPoolTask​​Executor)、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()]

私が持っている停止イベントフローは次のとおりです。

  1. ユーザーが停止ボタンをクリックしてコントローラーを呼び出す: stop-method
  2. Controller: stop-methodがService: stop - method を呼び出す
  3. Service: stop-method shutdownと通知Controller: launch-method

そして、プロセスが終了したことをController: launch-methodに通知するために、ステップ 3 をコーディングする必要があります。

threadPoolTask​​Executor.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) {...}

なにか提案を?

4

1 に答える 1

0

observer-observableパターンでデザインできます。Controller はどこにありObserver、 service は になりますObservable。そして、サービスが停止されるとsetChanged(); and notifyObservers();、それが完了したことをコントローラーに通知するためにトリガーされます。

于 2012-12-11T11:02:58.807 に答える