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

港口建设费申报网站微信订阅号做微网站吗

港口建设费申报网站,微信订阅号做微网站吗,seo接单,宁波公司排名在Spring Boot非Web应用中,使用虚拟线程时程序提前终止的问题及解决方案,可以通过以下步骤深入理解和验证: 问题根源分析 JVM退出机制 Java中,当所有非守护线程结束时,JVM会立即退出。即使存在正在运行的守护线程&…

在Spring Boot非Web应用中,使用虚拟线程时程序提前终止的问题及解决方案,可以通过以下步骤深入理解和验证:

问题根源分析

  1. JVM退出机制
    Java中,当所有非守护线程结束时,JVM会立即退出。即使存在正在运行的守护线程(如虚拟线程),JVM也不会等待它们完成。

  2. 虚拟线程的特性

    • 虚拟线程(Thread.ofVirtual()默认是守护线程,且无法通过setDaemon(false)修改。
    • 虚拟线程由JVM管理,不直接映射到操作系统线程,因此其生命周期与JVM的退出策略紧密相关。
  3. 非Web应用的默认行为
    非Web应用启动后,若没有其他非守护线程(如主线程、定时任务线程),JVM会立即退出。即使启用了虚拟线程执行任务,由于虚拟线程是守护线程,无法阻止JVM退出。

解决方案验证

Spring Boot从3.2.0-RC1开始提供spring.main.keep-alive=true配置,其原理如下:

  1. KeepAlive监听器
    启用后,Spring Boot会注册一个KeepAlive监听器,在上下文刷新完成后启动一个非守护线程(命名为keep-alive),该线程无限期休眠(Thread.sleep(Long.MAX_VALUE)),确保JVM不会退出。

  2. 线程终止逻辑
    当Spring上下文关闭时(如调用SpringApplication.exit()),KeepAlive监听器会中断keep-alive线程,允许JVM正常退出。

验证实验

实验1:未启用keep-alive
// 虚拟线程执行任务
OfVirtual virtual = Thread.ofVirtual().name("Task-");
virtual.start(() -> {System.out.println("任务开始");try { TimeUnit.SECONDS.sleep(5); } catch (InterruptedException e) {}System.out.println("任务结束");
});
// 主线程休眠1秒
TimeUnit.SECONDS.sleep(1);

结果:仅输出任务开始,程序立即退出。
原因:虚拟线程是守护线程,主线程结束后JVM直接退出。

实验2:启用keep-alive

application.properties中添加:

spring.main.keep-alive=true

结果:程序持续运行5秒,完整输出任务开始任务结束
原因keep-alive线程阻止JVM退出,等待虚拟线程任务完成。

扩展建议

  1. 任务完成检测
    如果任务需要显式通知完成,可结合CountDownLatchCompletableFuture

    CountDownLatch latch = new CountDownLatch(1);
    OfVirtual virtual = Thread.ofVirtual().name("Task-");
    virtual.start(() -> {try { /* 执行任务 */ }finally { latch.countDown(); }
    });
    latch.await(); // 阻塞直到任务完成
    
  2. 资源清理
    确保在关闭应用前终止所有虚拟线程,避免资源泄漏。可通过Thread.ofVirtual().factory().allThreads()获取所有虚拟线程并中断。

  3. 日志与监控
    启用虚拟线程后,建议配置日志记录线程信息(如%thread),以便区分平台线程与虚拟线程。

结论

用户提供的分析完全正确。虚拟线程的守护线程特性是导致非Web应用提前退出的根本原因,而spring.main.keep-alive=true通过注入非守护线程有效解决了这一问题。此方案是Spring Boot官方推荐的标准做法,适用于需要长期运行后台任务(如定时任务、消息消费)的非Web场景。


文章转载自:

http://xKlRYJ8C.qfqLd.cn
http://2ddWFuzC.qfqLd.cn
http://OKTEFtV7.qfqLd.cn
http://zgJ1Y3MD.qfqLd.cn
http://n1qC6EvI.qfqLd.cn
http://q19m3LaV.qfqLd.cn
http://TNVdsOPv.qfqLd.cn
http://0kuOJQFb.qfqLd.cn
http://oKiUeO6b.qfqLd.cn
http://uOp5KmXC.qfqLd.cn
http://XhOCvL9m.qfqLd.cn
http://Nb6GirBC.qfqLd.cn
http://xUf4SG2i.qfqLd.cn
http://4IJsmU7p.qfqLd.cn
http://BkHFrFlG.qfqLd.cn
http://2TqDajad.qfqLd.cn
http://nM0YVhMz.qfqLd.cn
http://H5XosWoc.qfqLd.cn
http://xB2NTp8U.qfqLd.cn
http://kD95O6HQ.qfqLd.cn
http://wMabjBCc.qfqLd.cn
http://owRmeUs1.qfqLd.cn
http://sdkNvhVi.qfqLd.cn
http://WQDDCgic.qfqLd.cn
http://itIVpyMG.qfqLd.cn
http://KXiKObvL.qfqLd.cn
http://fUnpIFlh.qfqLd.cn
http://H5x9j0aG.qfqLd.cn
http://gucB2xdF.qfqLd.cn
http://BvEDkMSp.qfqLd.cn
http://www.dtcms.com/wzjs/667067.html

相关文章:

  • 网站建设与维护题库企业网站排版规则
  • 南昌网站建设收费wordpress网址采集
  • 西安公司做网站开公司要做哪些准备
  • 做开发房地产网站可行吗网站实名审核中心
  • 家具网站首页模板企业网易邮箱
  • 台州椒江网站建设公司wordpress网站数据库崩溃
  • 如何做网站计数器怎样做网站标题的图标
  • 怎么做钓qq密码网站郴州百姓网
  • 网站开发安全需求苏州建设银行招聘网站
  • 品牌公司网站建设定制系统软件开发
  • 如何做微信电子书下载网站WordPress十万数据可以
  • 许昌知名网站建设价格外发加工网邀请码
  • 网站开发学校全搜网
  • 西安知名网站建设网页qq登录保护不让用
  • 做网站做的拼多多开网店
  • 深圳珠宝品牌网站设计wordpress彩色美化
  • 贵州网站建设营销公司联客易外贸网站建设推广
  • 中国最大的建材网站找人做网站 优帮云
  • 网站右边跳出的广告怎么做公司用员工信息做网站域名备案
  • 建设网站用什么代码写好呢建立自我
  • 要做网站照片怎么处理自动化设计网站建设
  • 海淀网站建设龙岩专业做视频的网站有哪些内容
  • 建设电影网站数据库脚本辽宁建设厅勘察设计网站
  • 点石嘉业北京网站建设公司任县附近网站建设价格
  • 免费网站优化外贸建设网站
  • 保定工程建设信息网站一个专做里番的网站
  • 怎么自己免费做网站理财网站免费建设
  • dedeai网站最新如何修改wordpress登录页
  • 综合性医院网站源代码下载自己做网站有什么用
  • 长春火车站到吉大一院自定义wordpress导航图标