gpt4 book ai didi

Java 多线程。如何停止线程并释放启动器?

转载 作者:行者123 更新时间:2023-12-01 04:57:46 26 4
gpt4 key购买 nike

我使用的是:Spring MVC( Controller +服务+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. 用户单击停止按钮并调用 Controller :停止方法
  2. Controller :stop-method 调用Service:stop-method
  3. ?? Service: stop-method 关闭并通知Controller: launch-method

我需要编写第 3 步的代码,以通知 Controller :启动方法该过程已完成。

我不知道为什么 threadPoolTask​​Executor.shutdown() 不释放正在等待的 Controller: launch-methodresult = future.get(); 并且没有引发异常。

try {
for (Future<String> future : sentResult) {
result = future.get();
...
}
} catch (ExecutionException e) {...}
catch (InterruptedException e) {...}
catch (CancellationException e) {...}
catch (Exception e) {...}

有什么建议吗?

最佳答案

您可以使用 observer-observable 进行设计图案。 Controller 将在哪里 Observer服务将是 Observable 。一旦服务停止,它将触发 setChanged();
and notifyObservers();
通知 Controller 已完成。

关于Java 多线程。如何停止线程并释放启动器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13818811/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com