gpt4 book ai didi

java - 终止由其他 Web 请求创建的 Web 请求中的线程

转载 作者:行者123 更新时间:2023-12-02 00:26:58 25 4
gpt4 key购买 nike

我在 tomcat 中有两个请求。一个 HTTP 请求将创建一个线程。客户端可以使用新的 HTTP 请求来终止同一线程。

可以这样做吗?如果可以的话怎么办?

最佳答案

哦,请不要在 Java EE 应用程序中自行生成非托管线程。使用 Executor 具有固定的线程池。使用 Callable 作为任务并使用 Future 作为 future 的结果。

在应用程序启动时创建一个(例如在 ServletContextListener 或 servlet 的 init() 中)。

ExecutorService executor = Executors.newFixedThreadPool(10); // Pool of 10 threads.

根据第一个请求,向其提交任务,获取 Future 结果。下面的示例假设它的类型为 StringTask Callable<String> :

Future<String> result = executor.submit(new Task());

将其存储在 session 中:

request.getSession().setAttribute("result", result);

对于同一 session 中的任何后续请求,您可以从 session 中获取它并检查它是否已完成,并在必要时取消它。

Future<String> result = (Future<String>) request.getSession().getAttribute("result");

if (result != null) {
if (!result.isDone() && userWantsToCancel) {
result.cancel();
}
}

另请参阅:

关于java - 终止由其他 Web 请求创建的 Web 请求中的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9805189/

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