gpt4 book ai didi

java - 终止Web应用程序中的java线程

转载 作者:行者123 更新时间:2023-12-02 06:07:21 25 4
gpt4 key购买 nike

我的 Web 应用程序(在 Tomcat 上)提供“动态”逻辑执行功能。
问题是“动态”逻辑可能包含无限循环或持续时间较长的内容。

我的解决方案是超时:在新的守护线程中运行“动态”逻辑并在超时时返回主线程,p代码如下:

 ExecutorService executor = Executors.newSingleThreadExecutor(new ThreadFactory(){
@Override
public Thread newThread(Runnable r) {
Thread t = new Thread(r);
result.setDaemon(true);
return t;
}});

Future<Object> future = executor.submit(callable/* 'on the fly' callable: it can be infinite loop, the callable is out of my control */);
//Back to main thread
return future.get(timeout, TimeUnit.MILLISECONDS);

但是,尽管 future.get() 返回超时,但守护线程仍在运行。守护进程将终止,直到 Tomcat 停止。

现在我最新的解决方案是创建一个新的Java进程 Runtime.getRuntime().exec("java MyProgram")MyProgram 包含之前显示的 future.get()。一旦主线程按预期退出,守护进程就会终止。

我来这里是为了寻求更优雅的解决方案来终止 Web 应用程序中的线程。新的 Java 进程很繁重并且无法控制 Web 应用程序。

谢谢!

最佳答案

托管环境中的线程通常是一个坏主意。为什么不使用某种抽象(例如 JMS)在每次有人发送请求时启动后台处理程序?这样您就可以控制 Activity 线程的数量(jms 池大小)

关于java - 终止Web应用程序中的java线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22166639/

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