当前位置: 首页 > wzjs >正文

门户网站是指提供什么的网站百度一下你就知道首页官网

门户网站是指提供什么的网站,百度一下你就知道首页官网,我想建个网站,网页设计和网站设计文章目录 资源泄漏(线程未关闭)问题描述错误实现优化原理正确实现优化原理 资源泄漏(线程未关闭) 问题描述 应用程序启动时创建线程池处理任务,但未在应用关闭时正确关闭线程池。 现象: 应用重启时&…

文章目录

  • 资源泄漏(线程未关闭)
    • 问题描述
    • 错误实现
    • 优化原理
    • 正确实现
    • 优化原理

资源泄漏(线程未关闭)

问题描述

应用程序启动时创建线程池处理任务,但未在应用关闭时正确关闭线程池。

  • 现象:
    • 应用重启时,残留的线程池线程仍在运行,占用内存和CPU资源。
    • 若线程池任务涉及外部资源(如数据库连接),可能导致资源耗尽或端口占用。

错误实现

  • 案例:未正确关闭线程池
public class ResourceLeakDemo {private static final ThreadPoolExecutor executor = new ThreadPoolExecutor(2, 4, 60, TimeUnit.SECONDS,new LinkedBlockingQueue<>());public static void main(String[] args) {executor.execute(() -> {while (true) {try {System.out.println("执行任务中...");Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}});// 模拟应用关闭(未关闭线程池)System.out.println("主线程结束,但线程池仍在运行!");}
}
  • 结果
主线程结束,但线程池仍在运行!
执行任务中...
执行任务中...
...
  • 主线程结束后,线程池中的核心线程(非守护线程)会持续运行,导致JVM无法退出。

优化原理

调优方案与场景

调优目标

  • 确保线程池关闭:在应用退出时,优雅关闭线程池,释放所有资源。
  • 防止资源泄漏:终止所有线程,避免残留任务占用系统资源。

解决方案

  1. 显式调用 shutdown():在应用退出逻辑中手动关闭线程池。
  2. 注册JVM关闭钩子:确保即使非正常退出(如kill命令),也能触发线程池关闭。

正确实现

  • 调优后:
public class ResourceLeakFixedDemo {private static final ThreadPoolExecutor executor = new ThreadPoolExecutor(2, 4, 60, TimeUnit.SECONDS,new LinkedBlockingQueue<>());public static void main(String[] args) {// 注册JVM关闭钩子Runtime.getRuntime().addShutdownHook(new Thread(() -> {System.out.println("JVM关闭钩子触发:关闭线程池...");shutdownThreadPool();}));executor.execute(() -> {while (true) {try {System.out.println("执行任务中...");Thread.sleep(1000);} catch (InterruptedException e) {System.out.println("任务被中断,退出循环");break;}}});// 模拟正常关闭(手动调用关闭逻辑)shutdownThreadPool();System.out.println("应用主线程结束");}private static void shutdownThreadPool() {executor.shutdown(); // 停止接受新任务,等待已有任务完成try {// 等待任务终止,最多10秒if (!executor.awaitTermination(10, TimeUnit.SECONDS)) {executor.shutdownNow(); // 强制终止所有任务System.out.println("线程池强制关闭");}} catch (InterruptedException e) {executor.shutdownNow();}}
}
  • 运行后:
执行任务中...
执行任务中...
JVM关闭钩子触发:关闭线程池...
执行任务中...
执行任务中...
执行任务中...
执行任务中...
线程池强制关闭
应用主线程结束
任务被中断,退出循环

优化原理

关键调优总结

1、注册关闭钩子

Runtime.getRuntime().addShutdownHook(new Thread(() -> shutdownThreadPool()));

2、优雅关闭线程池

  • shutdown():停止接受新任务,等待已有任务完成。
  • awaitTermination():设定超时时间,避免无限等待。
  • shutdownNow():超时后强制终止所有任务(向线程发送中断信号)。

3、任务响应中断

try {Thread.sleep(1000);
} catch (InterruptedException e) {break; // 捕获中断信号,退出任务
}

4. 建议

  • 统一管理线程池生命周期:在应用启动/关闭时显式初始化和销毁线程池。
  • 监控线程池状态:记录活跃线程数、队列大小、拒绝任务数等指标。
  • 防御性编程:任务代码需正确处理中断,避免死循环。
http://www.dtcms.com/wzjs/338548.html

相关文章:

  • 什么网站做唱歌主播运营推广的方式和渠道
  • 淘宝毕业设计网站代做百度视频排名优化
  • 建设网站需要虚拟空间嘛网店推广运营
  • 常德政务网站网站开发的一般流程
  • 自己建网站的优势百度一下你就知道官网网页
  • 北京市海淀区网站建设小视频关键词汇总
  • 如何用织梦猫做网站和后台外贸平台有哪些比较好
  • 网站关闭模板品牌营销和市场营销的区别
  • 北京制作公司网站广州信息流推广公司
  • 那些网站专门做棋牌推广的湖南关键词排名推广
  • 公司网站建设价格标准关键词排名推广公司
  • 住房和城乡建设部网站下载近期时政热点新闻20条
  • myeclipse网站开发不受国内限制的浏览器
  • 英国T4学生签证 可以做网站吗seo顾问能赚钱吗
  • 建设网站的主要流程建设营销网站
  • 银行的网站怎么做成都优化网站哪家公司好
  • wordpress自动网站地址百度公司地址
  • 网站开发 去哪里找页面英文seo兼职
  • 大连平台网站建设网络推广怎样做
  • 免费做威客的网站国内最新新闻摘抄
  • 公众号开发用什么技术快排seo排名软件
  • 企业品牌网站设计百度关键词搜索怎么做
  • 什么网站动物和人做的吗郑州seo网站有优化
  • 如何做php网站建设怎样搭建自己的网站
  • 企业网站模版app推广是做什么的
  • 北京企业建设网站大数据查询
  • 接单做网页的网站惠州网络推广平台
  • 公司做网站需要哪些手续时事热点新闻
  • 便宜网站建设靠谱吗清理大师
  • 如何网站点击率seo深度优化公司