java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > SpringBoot3虚拟线程使用

Spring Boot3虚拟线程的使用步骤详解

作者:招风的黑耳

虚拟线程是 Java 19 中引入的一个新特性,旨在通过简化线程管理来提升应用程序的并发性能,这篇文章主要介绍了Spring Boot3虚拟线程的使用步骤,文中通过代码介绍的非常详细,需要的朋友可以参考下

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

问题根源分析

解决方案验证

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

验证实验

实验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退出,等待虚拟线程任务完成。

扩展建议

结论

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

到此这篇关于Spring Boot3虚拟线程的使用步骤详解的文章就介绍到这了,更多相关SpringBoot3虚拟线程使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文