如果我有一个长时间运行的请求处理程序,并且用户点击浏览器停止按钮,我该如何终止处理程序以使其无法继续工作?我正在考虑一些简单的事情,例如根据客户端连接状态提出一个线程中断,从另一个看门狗线程(他们进来后给出连接)检查,但也许有更好的解决方案。
答案 0 :(得分:2)
另一种更简单的方法是使用ExecutorService
中的java.util.concurrent
使长时间运行的进程异步。立即返回,并给客户一个方法,以便在准备就绪时获得响应,联邦快递。
Servlet永远不应该执行进程,同步或异步。它们用于侦听HTTP请求,绑定和验证输入参数,路由到适当的服务以完成请求,以及将响应编组到适当的视图。
答案 1 :(得分:0)
如果用户点击“停止”按钮,除了连接重置之外,您将永远不会知道它。您没有机会提出线程中断:这意味着从浏览器到服务器中的另一个线程的另一个通信,这不会发生。
答案 2 :(得分:0)
处理此问题的一种方法是分别实现long work / req / proc并公开状态标志以提供状态。选项。现在从servlet async中调用它。当客户端按下STOP时,来servlet检查运行状态并在需要时中断并更新用户。