繁体   English   中英

退出时如何杀死库创建的非守护程序线程?

[英]How to kill non-daemon threads created by library when quitting?

我的应用程序在tomcat中运行,每次我停止tomcat它警告我有很多线程无法关闭。 这些线程是由我的应用程序使用的库创建的,我不知道如何杀死它们。 这个问题导致tomcat进程仍然存在,我调用了tomcat附带的bin / shutdown.sh。

任何人都可以帮忙吗? 谢谢

这些库还应该公开您需要调用的相应“关闭”,“停止”等方法。 检查各自的文件或来源。

您还可以使用jConsole或VisualVM在尝试关闭计算机后查看哪些线程处于活动状态。 如果你很幸运,你的图书馆会智能地命名它们(例如,RMQ不会默认),你可以告诉你剩下什么。

您可以使用实现ServletContextListener的类并使用@WebListener()对其进行@WebListener() (或者在早期版本的Tomcat中指示它是web.xml中的侦听器)。

该接口有两个方法contextInitializedcontextDestroyed ,您可以在实现中执行初始化和清理可能产生线程或需要特殊管理的任何库或类。 像Tomcat这样的Java Servlet容器将调用这两个方法作为webapps启动/停止生命周期的一部分。 例:

@WebListener()
public class RestartListener implements ServletContextListener {

    public void contextInitialized(ServletContextEvent servletContextEvent) {
        //some initialization code here
    }

    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        MemcachedManager.shutdown();
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM