最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring?Boot3虛擬線程的使用步驟詳解

 更新時間:2025年03月29日 10:25:38   作者:招風的黑耳  
虛擬線程是 Java 19 中引入的一個新特性,旨在通過簡化線程管理來提升應(yīng)用程序的并發(fā)性能,這篇文章主要介紹了Spring?Boot3虛擬線程的使用步驟,文中通過代碼介紹的非常詳細,需要的朋友可以參考下

在Spring Boot非Web應(yīng)用中,使用虛擬線程時程序提前終止的問題及解決方案,可以通過以下步驟深入理解和驗證:

問題根源分析

  • JVM退出機制Java中,當所有非守護線程結(jié)束時,JVM會立即退出。即使存在正在運行的守護線程(如虛擬線程),JVM也不會等待它們完成。

  • 虛擬線程的特性

    • 虛擬線程(Thread.ofVirtual()默認是守護線程,且無法通過setDaemon(false)修改。
    • 虛擬線程由JVM管理,不直接映射到操作系統(tǒng)線程,因此其生命周期與JVM的退出策略緊密相關(guān)。
  • 非Web應(yīng)用的默認行為非Web應(yīng)用啟動后,若沒有其他非守護線程(如主線程、定時任務(wù)線程),JVM會立即退出。即使啟用了虛擬線程執(zhí)行任務(wù),由于虛擬線程是守護線程,無法阻止JVM退出。

解決方案驗證

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

  • KeepAlive監(jiān)聽器啟用后,Spring Boot會注冊一個KeepAlive監(jiān)聽器,在上下文刷新完成后啟動一個非守護線程(命名為keep-alive),該線程無限期休眠(Thread.sleep(Long.MAX_VALUE)),確保JVM不會退出。

  • 線程終止邏輯當Spring上下文關(guān)閉時(如調(diào)用SpringApplication.exit()),KeepAlive監(jiān)聽器會中斷keep-alive線程,允許JVM正常退出。

驗證實驗

實驗1:未啟用keep-alive

// 虛擬線程執(zhí)行任務(wù)
OfVirtual virtual = Thread.ofVirtual().name("Task-");
virtual.start(() -> {
    System.out.println("任務(wù)開始");
    try { TimeUnit.SECONDS.sleep(5); } 
    catch (InterruptedException e) {}
    System.out.println("任務(wù)結(jié)束");
});
// 主線程休眠1秒
TimeUnit.SECONDS.sleep(1);

結(jié)果:僅輸出任務(wù)開始,程序立即退出。

原因:虛擬線程是守護線程,主線程結(jié)束后JVM直接退出。

實驗2:啟用keep-alive

application.properties中添加:

spring.main.keep-alive=true

結(jié)果:程序持續(xù)運行5秒,完整輸出任務(wù)開始和任務(wù)結(jié)束。

原因keep-alive線程阻止JVM退出,等待虛擬線程任務(wù)完成。

擴展建議

  • 任務(wù)完成檢測如果任務(wù)需要顯式通知完成,可結(jié)合CountDownLatchCompletableFuture

    CountDownLatch latch = new CountDownLatch(1);
    OfVirtual virtual = Thread.ofVirtual().name("Task-");
    virtual.start(() -> {
        try { /* 執(zhí)行任務(wù) */ }
        finally { latch.countDown(); }
    });
    latch.await(); // 阻塞直到任務(wù)完成
    
  • 資源清理確保在關(guān)閉應(yīng)用前終止所有虛擬線程,避免資源泄漏??赏ㄟ^Thread.ofVirtual().factory().allThreads()獲取所有虛擬線程并中斷。

  • 日志與監(jiān)控啟用虛擬線程后,建議配置日志記錄線程信息(如%thread),以便區(qū)分平臺線程與虛擬線程。

結(jié)論

用戶提供的分析完全正確。虛擬線程的守護線程特性是導(dǎo)致非Web應(yīng)用提前退出的根本原因,而spring.main.keep-alive=true通過注入非守護線程有效解決了這一問題。此方案是Spring Boot官方推薦的標準做法,適用于需要長期運行后臺任務(wù)(如定時任務(wù)、消息消費)的非Web場景。

到此這篇關(guān)于Spring Boot3虛擬線程的使用步驟詳解的文章就介紹到這了,更多相關(guān)SpringBoot3虛擬線程使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java語言中finally是否一定會執(zhí)行你知道嗎

    Java語言中finally是否一定會執(zhí)行你知道嗎

    這篇文章主要為大家詳細介紹了Java finally是否一定會執(zhí)行,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • Mybatis-plus之空值無法插入問題及解決

    Mybatis-plus之空值無法插入問題及解決

    這篇文章主要介紹了Mybatis-plus之空值無法插入問題及解決過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2026-05-05
  • springboot?整合?dubbo?的實現(xiàn)組聚合詳情

    springboot?整合?dubbo?的實現(xiàn)組聚合詳情

    這篇文章主要介紹了springboot整合dubbo的實現(xiàn)組聚合詳情,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-07-07
  • 關(guān)于Mybatis-Plus?Wrapper是否應(yīng)該出現(xiàn)在Servcie類中

    關(guān)于Mybatis-Plus?Wrapper是否應(yīng)該出現(xiàn)在Servcie類中

    最近在做代碼重構(gòu),代碼工程采用了Controller/Service/Dao分層架構(gòu),Dao層使用了Mybatis-Plus框架,本文帶領(lǐng)大家學習Mybatis-Plus?Wrapper應(yīng)該出現(xiàn)在Servcie類中嗎,需要的朋友可以參考下
    2023-05-05
  • Java接口操作(繼承父類并實現(xiàn)多個接口)

    Java接口操作(繼承父類并實現(xiàn)多個接口)

    這篇文章主要介紹了Java接口操作(繼承父類并實現(xiàn)多個接口),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • Java信號量Semaphore原理及代碼實例

    Java信號量Semaphore原理及代碼實例

    這篇文章主要介紹了Java信號量Semaphore原理及代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-10-10
  • Java面向?qū)ο蟪绦蛟O(shè)計多態(tài)性示例

    Java面向?qū)ο蟪绦蛟O(shè)計多態(tài)性示例

    這篇文章主要介紹了Java面向?qū)ο蟪绦蛟O(shè)計多態(tài)性,結(jié)合實例形式分析了java多態(tài)性的概念、原理、定義與使用方法及相關(guān)注意事項,需要的朋友可以參考下
    2018-03-03
  • java正則表達式判斷強密碼和隨機生成強密碼代碼示例

    java正則表達式判斷強密碼和隨機生成強密碼代碼示例

    這篇文章主要給大家介紹了關(guān)于java正則表達式判斷強密碼和隨機生成強密碼的相關(guān)資料,最近需要一個密碼強度正則表達式在用戶注冊時校驗用戶密碼強度,需要的朋友可以參考下
    2023-08-08
  • MyBatis-Plus中提供的各種注解詳細說明

    MyBatis-Plus中提供的各種注解詳細說明

    這篇文章主要介紹了MyBatis-Plus中提供的各種注解詳細說明,下面對MyBatis-Plus提供的注解進行整理,本文提供了部分示例代碼以方便理解,需要的朋友可以參考下
    2023-11-11
  • Javafx利用fxml變換場景的實現(xiàn)示例

    Javafx利用fxml變換場景的實現(xiàn)示例

    本文主要介紹了Javafx利用fxml變換場景的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-07-07

最新評論

阿坝| 乌兰县| 汪清县| 临清市| 安丘市| 渭源县| 依兰县| 乌鲁木齐市| 简阳市| 呼伦贝尔市| 黔西县| 平泉县| 秭归县| 伊吾县| 新安县| 酒泉市| 旅游| 洪泽县| 安仁县| 安龙县| 福海县| 潞城市| 含山县| 即墨市| 弥渡县| 万山特区| 芷江| 团风县| 孝昌县| 郧西县| 遂昌县| 明水县| 丰台区| 金平| 都江堰市| 三穗县| 平南县| 潢川县| 桦南县| 岳普湖县| 廊坊市|