【发布时间】:2019-04-03 14:18:52
【问题描述】:
在我的 spring boot 项目中,我有以下 GET web 服务
@GetMapping("/testThread")
@Transactional
public Map<String, Object> testThread(HttpServletRequest request) throws InterruptedException {
for (int i=0;i<10;i++){
Thread.sleep(3000);
System.out.println(i);
}
return null;
}
我从邮递员那里调用这个网络服务,并且网络服务线程内部正在启动,线程正在运行 10 次。
我的要求是在 10 秒后从邮递员那里调用网络服务后,我可以通过“取消请求”按钮取消该请求,然后后端线程也应该停止。
到目前为止,它已经运行了 10 次。
我们是否有任何选项可以在两者之间停止执行此循环?
【问题讨论】:
-
实际上我不是在谈论线程,我们可以说它的后台进程,如果我从邮递员那里点击休息服务,那么这个循环将开始,5 -10 秒后我取消请求。那我们有什么办法可以停止这个循环的执行吗?
-
使用 ExecutorService 并将您的工作提交给 id,生成 ID 并将其与 ExecutorService 返回的 Future 关联。使用另一个 REST 调用根据生成的 ID 请求取消。
-
@rkosegi 您能否再简单介绍一下,我如何生成 id 以及如何与 executor 服务关联以及如何通过使用另一个休息来取消它?如果您可以为此提供一些代码示例,那就太好了。
标签: java multithreading spring-boot