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. 用户单击停止按钮并调用控制器:停止方法
  2. 控制器:停止方法调用服务:停止方法
  3. ¿? 服务:停止方法关闭并通知控制器:启动方法

我需要编写第 3 步,以通知Controller:launch-method该过程已完成。

我不知道为什么 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模式。控制器将在哪里Observer,服务将在哪里Observable。一旦服务停止,它将触发setChanged(); and notifyObservers();通知控制器它已完成。

于 2012-12-11T11:02:58.807 回答