我们正在WebSphere集群中部署应用程序。应用程序正在运行他自己的从未终止的线程,这些线程正在检查某些条件,例如:
while(true){
logger.severe("Unterminated thread");
Thread.sleep(10000);
}
问题是,在WebSphere中停止应用程序之后(通过wsadmin或管理控制台),只有servlet被取消注册,但这些线程没有被终止,并且仍在运行。当我停止应用程序时,有什么方法可以杀死这个踏步吗?我们使用的是WebSphere 7。
谢谢
发布于 2011-12-15 15:19:00
根据你对另一个答案的评论,我有一个建议。(请注意,我同意奥列格的观点,你真的不应该这样做,但如果你必须这样做的话……)
我假设在这段代码来自的常规Java应用程序中,这些后台线程以某种方式接收到了停止的信号。我建议的是,当您的servlet都已注销时,使用ServletContextListener
发送停止信号。
请注意,如果您还没有某种方法来告诉线程停止,那么这可能是另一个bug,而这根本没有任何帮助。
发布于 2011-12-15 14:21:18
您不应该从JavaEE应用程序手动创建线程。线程管理应该由JavaEE容器提供。
WebSphere提供了一种WorkManager机制来帮助您满足线程需求。有关实现细节,请查看this tutorial。
https://stackoverflow.com/questions/8521300
复制相似问题