问题:
在Java 代码中开了一个线程,死循环定时运行。
右键运行项目,再右键停目项目:
发现系统有提示警告:
警告: Web应用程序[ROOT]似乎启动了一个名为[Thread-1]的线程,但未能停止它。这很可能会造成内存泄漏。线程的堆栈跟踪:[ java.lang.Thread.sleep(Native Method) taurus.microservice.Run$1.run(Run.java:46) java.lang.Thread.run(Thread.java:745)] 九月 07, 2022 1:36:13 下午 org.apache.coyote.AbstractProtocol stop 信息: 正在停止ProtocolHandler ["http-nio-8090"] 九月 07, 2022 1:36:13 下午 org.apache.coyote.AbstractProtocol destroy 信息: 正在摧毁协议处理器 ["http-nio-8090"]
一开始,我以为线程已经停了,直到我开启了微服务,发现项目都停了,微服务还有不停的注册信息。
经过反复寻找,这才发现:
项目停止后,线程还在跑,而且开几次,就有几个线程在跑,What the fuck。
直到把整个Eclipse 退了,这些线程的运行才消息。
解决:
1、监听项目退出的信息。
package taurus.mvc.http; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.annotation.WebListener; import taurus.mvc.tool.Debug; @WebListener() public class HttpServletContextListenerForJavax implements ServletContextListener { @Override public void contextDestroyed(ServletContextEvent arg0) { HttpContext.IsDestroyed=true; Debug.log("ServletContext Destroyed!"); } @Override public void contextInitialized(ServletContextEvent arg0) { // TODO Auto-generated method stub } }
退出时,把标识赋到一个全局变量中。
2、在线程里加上判断,如果项目退出,就退出线程的死循环。
new Thread(new Runnable() { public void run() { Random random=new Random(); Debug.log("MicroService.Run.start.Thread.Runnable : Start"); while (true) { try { if(HttpContext.IsDestroyed) { Debug.log("MicroService.Run.start.Thread.Runnable : Stoped"); break; } AfterRegHost(RegHost()); Thread.sleep(5000+random.nextInt(5000));//5-10秒循环1次。 } catch (Exception err) { Debug.log(err,"Run.start.Thread.Runnable"); try { Thread.sleep(5000+random.nextInt(5000));//5-10秒循环1次。 }catch (Exception e) {} } } } }).start();
版权声明:本文原创发表于 博客园,作者为 路过秋天 本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。 |
个人微信公众号![]() |
Donation(扫码支持作者):支付宝:![]() |
Donation(扫码支持作者):微信:![]() |
![]() |
分类:
Java(Eclipse)
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
2016-09-07 ASP.NET Aries 3.0发布(附带通用API设计及基本教程介绍)
2010-09-07 Acess 数据库 查询数据表结构等问题小记
2010-09-07 CYQ.Data 数据框架系列索引