有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

TomcatJava:有没有一种方法可以在取消部署应用程序之前删除所有的ThreadLocals?

我得到了这个错误:

SEVERE: The web application [/app] appears to have started a thread named [ImmediateThread-1469817702874] but has failed to stop it. This is very likely to create a memory leak.

我用球衣做这个,我相信它创造了ImmediateThread,基本上,我无法控制这个。有没有什么方法可以让我直接访问所有ThreadLocal对象并将它们从contextDestroyed()上删除

我知道,如果我们只是基本上重启Tomcat服务器,这一点可以忽略,但我希望能够在不担心内存泄漏的情况下,取消部署和部署应用程序

我正在使用Java 7、Tomcat 7、Jersey和Hibernate


共 (1) 个答案

  1. # 1 楼答案

    如果您使用了足够新的HK2,您应该能够像John Wells建议的那样使用工具来控制直接线程(参见https://java.net/jira/browse/HK2-280?focusedCommentId=390557&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-390557

    实际上,如果这些工具足够好的话,如果我们按照预期在Jersey中默认启用立即作用域,那就太酷了(参见https://java.net/jira/browse/JERSEY-2979
    我想,我们的想法是使用Jersey控制的executor服务来处理即时线程,这些线程在Jersey应用程序生命周期的适当时刻关闭(例如,通过使用https://jersey.java.net/apidocs/latest/jersey/org/glassfish/jersey/server/spi/ContainerLifecycleListener.html

    如果你能为这张票https://java.net/jira/browse/JERSEY-2979做出贡献(至少通过添加一个例子),那就太棒了