精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

SpringBoot3使用虛擬線程一定要小心了

開發 前端
虛擬線程在項目中應用時你稍不注意就可能出現問題。本篇文章將要講述的是在非Web應用的情況下使用虛擬線程出現的問題(并非BUG)。

環境:SpringBoot3.2.5 + JDK21

1.簡介

SpringBoot從3.2.0-M1版本開始支持虛擬線程。虛擬線程是JDK 21版本正式發布的一個新特性,它與平臺線程的主要區別在于虛擬線程在運行周期內不依賴操作系統線程,而是與硬件脫鉤,因此被稱為“虛擬”。這種解耦是由JVM提供的抽象層賦予的,使得虛擬線程的運行成本遠低于平臺線程,并且可以消耗更少的內存。因此,從SpringBoot 3.2.0-M1開始,通過使用虛擬線程,提升系統的整體性能。

虛擬線程在項目中應用時你稍不注意就可能出現問題。本篇文章將要講述的是在非Web應用的情況下使用虛擬線程出現的問題(并非BUG)。

2. 實戰案例

注意:本案例是非Web應用。只要你不要引入spring-boot-starter-web模塊或者下面配置后都將以非web模式下運行。

public static void main(String[] args) {
  new SpringApplicationBuilder()
    .sources(SpringbootNonWebApplication.class)
    // 即便引入了web模塊,但這里設置為非web應用
    .web(WebApplicationType.NONE)
    .run(args) ;
}

非web應用,啟動容器后并不會啟動嵌入式的web server,如果你當前應用中并沒有其它線程執行(非守護線程),那么程序將自動停止(啟動即停止)。

圖片圖片

啟動完后自動停止。

2.1 啟動定時任務

在一個非web環境下啟動定時任務:

@Component
public class TaskComponent {


  @Scheduled(fixedRate = 3000)
  public void task1() throws Exception {
    System.out.printf("當前執行線程: %s%n", Thread.currentThread()) ;
    // TODO 執行任務
    TimeUnit.SECONDS.sleep(1) ;
  }
}

上面定義了每隔3s執行的定時任務(記得通過@EnableScheduling注解開啟任務調用功能)。

啟動服務

圖片圖片

程序規律的執行,每隔3s輸出信息。

2.2 虛擬線程執行任務

接下來開啟虛擬線程。

如果運行的是 Java 21 或更高版本,可以通過配置如下屬性來啟用虛擬線程。

spring:
  threads:
    virtual:
      enabled: true

再次運行程序

圖片圖片

根據打印信息,執行線程確實是通過虛擬線程執行,但是僅僅啟動時輸出了一條信息,程序就終止了,這肯定不是我們想要的。什么原因呢?

2.3 守護線程

這是一段非常簡單的代碼了

Thread t = new Thread(() -> {
  try {
    System.out.println("start..." + System.currentTimeMillis()) ;
    TimeUnit.SECONDS.sleep(5) ;
  } catch (Exception e) {
    e.printStackTrace() ;
  }
  System.out.println(" over..." + System.currentTimeMillis()) ;
}) ;
t.start() ;

輸出結果:

start...1613150235234
 over...1613150240238

程序等待3s后終止。接下來將上面Thread線程做如下配置:

// 設置為守護線程
t.setDaemon(true) ;

再次執行,這次執行控制臺不會有任何的輸出程序就終止了。

在Java中當所有非守護線程都執行完以后,守護線程會自動終止;守護線程一般用于執行后臺任務,資源清理等。

接下來通過虛擬線程執行上面的代碼:

OfVirtual virtual = Thread.ofVirtual().name("Pack-") ;
Thread t = virtual.start(() -> {
  try {
    System.out.println("start..." + System.currentTimeMillis()) ;
    TimeUnit.SECONDS.sleep(5) ;
  } catch (Exception e) {
    e.printStackTrace() ;
  }
  System.out.println("over..." + System.currentTimeMillis()) ;
}) ;
TimeUnit.SECONDS.sleep(1) ;

等待1s后程序終止,只輸出如下結果:

start...1613840844449

虛擬線程難道也是守護線程?

通過如下代碼查看上面的虛擬線程是否是守護線程:

System.out.println(t.isDaemon()) ;

輸出結果:

true

既然是守護線程,那么程序自動停止也就不意外了。下面是來自官方對虛擬線程與平臺線程的區別:

  • 虛擬線程始終是守護線程。Thread.setDaemon(boolean) 方法無法將虛擬線程更改為非守護線程。
  • 虛擬線程的固定優先級為 Thread.NORM_PRIORITY。Thread.setPriority(int) 方法對虛擬線程不起作用。這一限制可能會在未來的版本中重新考慮。
  • 虛擬線程不是線程組的活動成員。在虛擬線程上調用 Thread.getThreadGroup() 時,會返回一個名稱為 "VirtualThreads "的占位線程組。Thread.Builder API 沒有定義設置虛擬線程線程組的方法。

2.4 KeepAlive虛擬線程

既然虛擬線程是守護線程,那么要如何解決上面的問題呢?在SpringBoot3.2.0-RC1版本開始為SpringApplication添加"keep-alive"屬性,專門解決虛擬線程問題。

可以通過如下配置開啟keepAlive。

spring:
  main:
    keep-alive: true

通過上面的配置后,再次運行上面的程序

圖片圖片

這時候程序不會退出了一直運行。?

2.5 實現原理

當開啟上面的spring.main.keep-alive=true后,springboot在啟動時會注冊一個監聽器。

public class SpringApplication {
  public ConfigurableApplicationContext run(String... args) {
    // ...
    prepareContext(bootstrapContext, context, environment, listeners, applicationArguments, printedBanner);
    // ...
  }
  private void prepareContext(...) {
    // ...
    // SpringBoot在啟動時準備Environment時會自動將spring.main下的
    // 屬性配置綁定到當前的SpringApplication對象中(屬性)。
    if (this.keepAlive) {
      // 添加事件監聽
      context.addApplicationListener(new KeepAlive());
    }
    // ...
  }
}

事件監聽程序KeepAlive。

private static final class KeepAlive implements ApplicationListener<ApplicationContextEvent> {
  public void onApplicationEvent(ApplicationContextEvent event) {
    if (event instanceof ContextRefreshedEvent) {
      // Spring上下文刷新完成
      startKeepAliveThread();
    }
    // Spring容器在關閉時
    else if (event instanceof ContextClosedEvent) {
      stopKeepAliveThread();
    }
  }
  private void startKeepAliveThread() {
    // 啟動異步線程,一直休眠(保證一直運行著,這樣程序就不會終止了)
    Thread thread = new Thread(() -> {
      while (true) {
        try {
          Thread.sleep(Long.MAX_VALUE);
        }
      }
    });
    if (this.thread.compareAndSet(null, thread)) {
      // 非守護線程
      thread.setDaemon(false);
      thread.setName("keep-alive");
      thread.start();
    }
  }
  private void stopKeepAliveThread() {
    Thread thread = this.thread.getAndSet(null);
    if (thread == null) {
      return;
    }
    // 終止線程
    thread.interrupt();
  }
}

SpringBoot實現邏輯還是非常簡單的。

責任編輯:武曉燕 來源: Spring全家桶實戰案例源碼
相關推薦

2024-03-04 08:19:11

SpringURLHeader

2024-01-31 08:26:44

2023-08-07 14:28:07

SpringBoot工具

2022-03-31 07:52:01

Java多線程并發

2020-02-07 09:27:35

網絡安全信息安全電子郵件

2021-12-03 12:35:50

new[]delete[]語言

2022-04-24 09:54:24

ProxyReflect前端

2023-08-09 08:29:51

SpringWeb編程

2018-04-16 10:22:08

超融合基礎設施

2010-11-19 16:02:42

IT族

2020-09-08 14:05:06

Redis數據庫緩存

2022-03-21 07:40:08

線程池Executors方式

2022-10-17 06:22:36

Anaconda開源

2022-06-01 16:17:00

互聯網Web3區塊鏈

2023-08-11 08:59:49

分庫分表數據數據庫

2024-10-08 08:26:43

2021-03-05 11:02:14

iOS 14.5蘋果更新

2011-11-09 14:54:50

Linux操作系統

2022-08-31 22:50:13

JavaScript函數JSON

2022-05-30 07:36:07

Python腳本函數
點贊
收藏

51CTO技術棧公眾號

国产喂奶挤奶一区二区三区| 韩国亚洲精品| 91精品中文字幕一区二区三区| 国产麻豆电影在线观看| 亚洲欧美高清视频| 老妇喷水一区二区三区| 欧美成人亚洲成人日韩成人| 日韩片在线观看| av在线国产精品| 欧美日韩亚洲天堂| 可以免费看的黄色网址| 国产综合视频一区二区三区免费| 韩国v欧美v日本v亚洲v| 91极品女神在线| 欧美性x x x| 蜜桃国内精品久久久久软件9| 91精品国产综合久久蜜臀| 男人日女人逼逼| 成人在线观看亚洲| 国产精品欧美一级免费| 久久99精品久久久久久三级| 国产免费黄色片| 日本 国产 欧美色综合| 午夜精品一区二区三区在线播放| 手机免费观看av| 欧美丝袜足交| 精品va天堂亚洲国产| 中文字幕资源在线观看| 日韩av首页| 欧美午夜片在线免费观看| 成人国产一区二区三区| 在线观看免费高清完整| 久久久蜜桃精品| 国产综合第一页| 性少妇videosexfreexxx片| 奇米影视在线99精品| 欧美亚洲伦理www| 亚洲综合一二三| 黑人一区二区三区四区五区| 久久久国产精品x99av| 国产精品综合激情| 精品一区二区三区中文字幕老牛 | 91精品无人成人www| 天堂电影一区| 午夜影院在线观看欧美| 亚洲 自拍 另类小说综合图区| 黄色网址视频在线观看| 国产精品女同一区二区三区| 亚洲精品不卡| 欧美日韩免费做爰大片| 久久夜色精品一区| 久久综合伊人77777麻豆| 偷拍自拍在线| 26uuu精品一区二区三区四区在线| 高清视频一区二区三区| www.黄色片| 成人一道本在线| a级国产乱理论片在线观看99| 国产黄色一级大片| 国产精品123| 国产精品国产三级欧美二区| 人妻少妇精品无码专区| 99精品视频在线观看| 久久综合毛片| 九一在线视频| 国产精品无圣光一区二区| 中文字幕欧美日韩一区二区三区| 秋霞a级毛片在线看| 亚洲老司机在线| 狠狠精品干练久久久无码中文字幕| 欧美xxxx黑人又粗又长| 亚洲一区视频在线| 国产xxxxx在线观看| av成人免费看| 日韩一区二区精品在线观看| 女性生殖扒开酷刑vk| 丝袜久久网站| 在线电影av不卡网址| 天海翼在线视频| 欧美日韩国产综合网| 69久久夜色精品国产7777| 欧美一级特黄视频| 免费观看一级特黄欧美大片| 91亚色免费| 三级在线播放| 亚洲视频狠狠干| 久久这里只有精品23| 日韩电影免费观| 91精品国产91热久久久做人人| 人妻av一区二区三区| 亚洲福利网站| 久久国产精品电影| 午夜精品久久久久久久久久久久久蜜桃 | www.日韩在线| 亚洲精品不卡| 99久久精品免费看国产小宝寻花 | 久久久久久亚洲| 日本免费精品视频| 国产成人av影院| 日本日本精品二区免费| av在线免费观看网址| 污片在线观看一区二区| 亚洲国产成人va在线观看麻豆| 51亚洲精品| 中文字幕亚洲精品| 国产做受高潮漫动| 加勒比av一区二区| 欧美一区二区三区精美影视 | 国产91免费观看| 国产成人a人亚洲精品无码| 26uuu亚洲| 欧美a级免费视频| 成人国产激情在线| 亚洲精品在线看| 久久精品一区二区三| 免费成人av在线| 久久久久久精| 成人福利电影| 欧美一二区视频| 免费一级suv好看的国产网站| 一区二区三区精品视频在线观看 | 奇米影视四色在线| 美女亚洲一区| 9.1国产丝袜在线观看| 亚洲黄色在线观看视频| 亚洲欧美在线另类| 15—17女人毛片| 黄色不卡一区| 欧洲成人午夜免费大片| 成人久久久精品国产乱码一区二区| 中文字幕亚洲区| 青青青在线视频免费观看| 任你弄精品视频免费观看| 欧美黑人巨大精品一区二区| 91精品国产色综合久久不8| 中文无字幕一区二区三区| 日韩欧美在线免费观看视频| 日韩啪啪网站| 91精品国产高清自在线| 亚洲精品无amm毛片| 亚洲激情综合网| 国产九九在线视频| 欧美理论在线播放| 国产精品视频区| 无遮挡的视频在线观看| 欧美人牲a欧美精品| 正在播放国产对白害羞| 日本人妖一区二区| 欧美日韩综合另类| 成人在线网站| 日日狠狠久久偷偷四色综合免费 | 国内一区二区在线| 亚洲区成人777777精品| 国产午夜精品一区在线观看| 久久成人亚洲精品| www.黄色一片| 偷拍一区二区三区四区| 双性尿奴穿贞c带憋尿| 国产乱码精品| 日韩国产高清一区| 亚洲伦理网站| 欧美黄网免费在线观看| 日本免费网站在线观看| 欧美视频在线视频| 2017亚洲天堂| 国产91精品免费| 男人日女人bb视频| 欧美美女视频| 1区1区3区4区产品乱码芒果精品| 日韩激情美女| 亚洲精品小视频| 中文字幕欧美在线观看| 亚洲欧洲综合另类在线| 国产日韩视频一区| 久久久久久久尹人综合网亚洲| 午夜视频久久久| 成人亚洲精品| 777777777亚洲妇女| 国产精品毛片一区二区三区四区| 欧美群妇大交群的观看方式| 九九热精品在线观看| 久久亚洲精品国产精品紫薇| 亚洲精品久久久久久宅男| 国精品一区二区三区| 日韩欧美一卡二卡| 97热精品视频官网| av手机天堂网| 中文字幕一区二区三区不卡| 亚洲区 欧美区| 国产精品综合| 好吊色视频988gao在线观看| 香蕉国产成人午夜av影院| 国产精品旅馆在线| 亚洲区欧洲区| 亚洲精品美女网站| 中文字幕精品在线观看| 亚洲精品福利视频网站| 国产原创剧情av| 新67194成人永久网站| 制服诱惑一区| 中文字幕av一区二区三区人| 99热在线国产| 91国内外精品自在线播放| 欧美高清性猛交| aaa在线免费观看| 亚洲国产欧美自拍| 国产三级第一页| 在线视频国内一区二区| 国产精品不卡av| 国产精品理论在线观看| 国产 中文 字幕 日韩 在线| 国产在线麻豆精品观看| 欧美精品第三页| 99热在线精品观看| 日本a在线天堂| 国产精品成人a在线观看| 欧美精品亚洲| 欧美毛片免费观看| 国产精品.com| 亚洲va欧美va人人爽成人影院| 国产精品久久国产精品99gif| 岛国在线视频网站| 久久久久久久成人| 岛国成人毛片| 久久夜色精品亚洲噜噜国产mv| 黄色软件在线观看| 亚洲精品视频中文字幕| 人妻妺妺窝人体色www聚色窝| 日韩精品中文字幕在线不卡尤物 | 国产欧美综合精品一区二区| 日韩最新av| 成人精品久久久| 欧美亚洲黄色| 国产精品欧美在线| 巨骚激情综合| 欧美日韩老妇| 国产精品久久久久久av福利软件 | 国产91精品不卡视频| 污视频免费在线观看| 久久亚洲私人国产精品va| 午夜在线小视频| 中文字幕日韩av电影| 成人在线视频成人| 在线观看日韩www视频免费| 国产乱理伦片a级在线观看| 精品爽片免费看久久| 少妇激情av一区二区| 日韩电影视频免费| 日韩专区一区二区| 亚洲欧美国内爽妇网| 国产天堂素人系列在线视频| 国产一区二区三区直播精品电影| 成年人视频在线观看免费| 最新国产精品拍自在线播放| 成人高清网站| 久久久www成人免费精品张筱雨| 国产成人无吗| 久久久久久久久久久免费| av2020不卡| 国产成人精品在线播放| 国产精品伦一区二区| 亚洲综合在线做性| 国产伦乱精品| 欧美一级二级三级| 欧美国产一级| 成人免费a级片| 国产日韩精品视频一区二区三区 | 久久亚洲综合色| 91资源在线播放| 亚洲日穴在线视频| 久久亚洲成人av| 日韩欧美一区二区三区久久| 最新中文字幕第一页| 制服丝袜成人动漫| 欧美视频久久久| 在线精品国产欧美| 污片在线免费观看| 日本一欧美一欧美一亚洲视频| 色综合一区二区日本韩国亚洲 | av永久不卡| 无码人妻精品一区二区三区99v| 伊人久久综合| 亚洲高清免费在线观看| 白白色 亚洲乱淫| 美国美女黄色片| 亚洲国产一区二区视频| 手机av免费观看| 日韩精品一区二区三区在线播放| 五月婷婷综合久久| 日韩中文字幕免费视频| 成av人片在线观看www| 国产精品美女久久久免费 | 国产一区91精品张津瑜| 国产av一区二区三区传媒| 欧美激情一区不卡| 麻豆亚洲av成人无码久久精品| 精品国产福利视频| 国产欧美第一页| 亚洲天堂免费视频| 美女精品导航| 成人xxxxx| 欧美日韩中字| www插插插无码视频网站| 老司机一区二区| 中文字字幕码一二三区| 亚洲一级二级三级在线免费观看| 国产精华7777777| 日韩大陆毛片av| 性欧美1819sex性高清大胸| 国产成人精品在线| 日韩手机在线| 大胆欧美熟妇xx| 精品一区二区在线视频| 波多野结衣 在线| 亚洲国产欧美在线| 国产伦理一区二区| 中文字幕在线观看日韩| 特黄毛片在线观看| 国产精品免费在线| 欧美国产专区| 日韩欧美中文视频| 中文字幕一区二区三| 成人免费视频国产免费| 亚洲精品乱码久久久久久按摩观| 国产精品久久久久久福利| 国产精品吹潮在线观看| 亚洲aaa级| 乱妇乱女熟妇熟女网站| 成人国产免费视频| 久久免费小视频| 欧美大胆人体bbbb| 色呦呦久久久| 97人人干人人| 午夜精彩国产免费不卡不顿大片| 亚洲欧美日本一区二区三区| 欧美激情一区二区三区在线| 99re这里只有精品在线| 精品网站999www| 亚洲一级少妇| 欧美日韩高清在线一区| 久久欧美肥婆一二区| 久久久精品人妻无码专区| 日韩欧美成人精品| 男人天堂综合| 国产精品成人va在线观看| 精品国产一区二区三区香蕉沈先生| 国产熟女高潮视频| 国产婷婷一区二区| 天天爱天天做天天爽| 中文字幕一区电影| 国产免费区一区二区三视频免费| 久久久久久久免费视频| 国产盗摄一区二区三区| 国产在线视频99| 亚洲国产精品美女| 日本成人三级电影| 日韩精品另类天天更新| 久久激情综合网| 麻豆视频在线免费看| 精品免费日韩av| 性欧美又大又长又硬| 日韩电影免费观看在| 久久机这里只有精品| 免费一级肉体全黄毛片| 亚洲成人999| 日韩影片中文字幕| 伊人久久婷婷色综合98网| 国产精品影音先锋| 久久久久久久久久久久久av| 亚洲欧美综合图区| 亚洲精品成人一区| 亚洲精品蜜桃久久久久久| 久久一二三国产| 97超碰资源站| 97激碰免费视频| 久久视频国产| 黄色av电影网站| 在线免费观看日本一区| 国产精品久久麻豆| 蜜桃成人在线| 久久99这里只有精品| 国产一级视频在线| 国产亚洲xxx| 伊人精品久久| 最近免费中文字幕中文高清百度| 国产精品国产自产拍在线| 人妻无码中文字幕免费视频蜜桃| 国产成人精品综合久久久| 亚洲一区二区日韩| 亚洲成人网在线播放| 欧美一区二区精品久久911| 免费成人在线电影| 免费观看黄色大片| 久久色.com| 亚洲黄色在线播放| 国产精品丝袜白浆摸在线| 日韩视频久久| 欧美爱爱免费视频| 亚洲视频免费一区| 老司机在线精品视频|