精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

亚洲国产精久久久久久| 亚洲男同性视频| 国产精品福利在线观看| 国产3级在线观看| 99久久免费精品国产72精品九九| 亚洲不卡av一区二区三区| 日本一区不卡| 亚洲精品视频专区| 青草国产精品久久久久久| 欧美成人亚洲成人| 欧美 日韩 成人| 亚洲精品在线a| 91国偷自产一区二区开放时间| 日韩视频在线观看视频| 青青青视频在线播放| 亚洲图片综合网| 伊人久久av| 亚洲乱码中文字幕| 日韩欧美一区二区在线观看| 日韩专区第一页| 国产一区二区三区四| 国产97在线|亚洲| 亚洲国产精品午夜在线观看| 日本一区二区高清不卡| 亚洲精品成a人在线观看| 久久久久xxxx| 欧洲一区二区三区精品| 婷婷一区二区三区| 久久久久久www| 国产原创精品视频| 国产精品午夜久久| 热re99久久精品国99热蜜月| 天天操天天干天天干| 国产福利视频一区二区三区| 国产精品吴梦梦| 免费污污视频在线观看| 一本色道久久综合亚洲精品不| 欧美成人黑人xx视频免费观看| 91成人在线免费视频| 欧美成人一区在线观看| 精品免费日韩av| 三级av免费看| 电影一区二区三区久久免费观看| 欧美午夜精品久久久| 毛片一区二区三区四区| 中文在线а√在线8| 五月婷婷欧美视频| 欧美成人高潮一二区在线看| 欧美亚洲系列| 亚洲一区二区精品久久av| 少妇久久久久久被弄到高潮| 黄在线免费观看| 亚洲欧美一区二区视频| 久久99国产精品一区| 日本不卡在线| 亚洲欧美日韩国产手机在线| 久久久成人精品一区二区三区| 久草免费在线| 亚洲精品成人天堂一二三| 男插女免费视频| 性欧美video高清bbw| 亚洲一区二区视频在线| 日韩欧美国产综合在线| 综合另类专区| 欧美丝袜丝交足nylons| 91国内在线播放| 国产在线不卡一区二区三区| 日韩精品一区二区三区中文不卡 | 欧美一区国产二区| 中文字幕一二三区| 欧美做受69| 一本色道久久88综合亚洲精品ⅰ | 一级全黄裸体片| 大桥未久女教师av一区二区| 精品国产伦一区二区三区观看方式| 动漫美女无遮挡免费| 亚洲精品亚洲人成在线观看| 中文字幕亚洲第一| 欧美色图亚洲天堂| 国产精品外国| 91精品久久久久久久久久久久久久| 一区二区日韩在线观看| 国产成人精品影院| 蜜桃日韩视频| 美女国产在线| 精品久久久久久中文字幕大豆网| www日韩视频| 1204国产成人精品视频| 亚洲男子天堂网| 小泽玛利亚一区二区免费| 日韩天天综合| 国产中文字幕亚洲| 香蕉av一区二区三区| 国产精品另类一区| 欧美视频免费看欧美视频| 成人涩涩视频| 亚洲精品一区二区三区香蕉| 亚洲ⅴ国产v天堂a无码二区| 亚洲国产mv| 国产日韩专区在线| 亚州精品国产精品乱码不99按摩| 国产精品久久久久久久岛一牛影视| av无码久久久久久不卡网站| 成人一级视频| 亚洲经典中文字幕| 26uuu成人网| 天堂va蜜桃一区二区三区漫画版| 97中文在线| 在线观看精品一区二区三区| 婷婷综合五月天| 国产精品99久久久精品无码| 日本欧美视频| 欧美一级视频免费在线观看| 午夜久久久久久久久久| 国产精品伦理一区二区| 成年人在线看片| 欧美黑白配在线| 欧美另类xxx| 在线免费一级片| 久久久蜜桃精品| 欧美这里只有精品| 电影91久久久| 日韩在线观看免费高清完整版| 国产综合精品视频| 成人免费观看视频| 777久久精品一区二区三区无码| 国产精品成人国产| 国产一区二区激情| www.色国产| 久久久国产精品不卡| 5月婷婷6月丁香| 国产精品对白| 欧美精品久久久久a| 国产男女裸体做爰爽爽| 国产精品久久久久久久久搜平片| 成人中文字幕av| 国内黄色精品| 国产精品r级在线| 欧美精品a∨在线观看不卡| 亚洲超碰精品一区二区| 在线免费看黄色片| 夜夜嗨一区二区三区| 久久久久久99| 中文在线8资源库| 亚洲免费精彩视频| 中文字幕在线观看视频免费| 久久一区二区三区四区| 日韩av一二三四| 欧美日一区二区| 国产精品久久999| 最新97超碰在线| 欧美另类高清zo欧美| 日韩a级片在线观看| 国产麻豆午夜三级精品| 成人免费性视频| 欧美亚视频在线中文字幕免费| 69视频在线播放| 欧美视频综合| 欧美日韩视频在线一区二区| 国产尤物在线播放| 国产成人精品亚洲午夜麻豆| 91动漫在线看| 国内精品久久久久久99蜜桃| 国产精品午夜国产小视频| 菠萝蜜视频国产在线播放| 欧美成人精品1314www| 亚州国产精品视频| 国产午夜亚洲精品午夜鲁丝片| 黄色片视频在线| 欧美日韩 国产精品| 精品乱码一区| av在线不卡精品| 久久伊人91精品综合网站| 黄色片一区二区三区| 日韩欧美精品中文字幕| 国产又粗又猛又爽又黄的视频四季| 久久国产视频网| 免费高清一区二区三区| 九九久久电影| 91久久国产精品91久久性色| 男女在线视频| 一区二区在线视频| www.桃色av嫩草.com| 日韩欧美极品在线观看| 精品国产大片大片大片| 成人夜色视频网站在线观看| aⅴ在线免费观看| 中国精品18videos性欧美| 久久99精品久久久久久青青日本| 久久国内精品| 2019亚洲日韩新视频| 欧美jizzhd欧美| 亚洲激情在线视频| 国产三级自拍视频| 91国在线观看| 精品少妇久久久| 国产精品视频观看| 波多野结衣影院| 国产美女精品一区二区三区| 免费av网址在线| 狠狠88综合久久久久综合网| 亚洲 日韩 国产第一区| 精品久久对白| 成人国产在线视频| 欧美激情喷水| 久久久综合免费视频| 婷婷五月在线视频| 亚洲精品资源美女情侣酒店| 精品国产乱码久久久久久蜜臀网站| 色94色欧美sute亚洲线路二| 久久精品国产亚洲av高清色欲| 亚洲国产精品激情在线观看| 特级西西人体4444xxxx| 国产大陆精品国产| 中文字幕一区久久| 日本亚洲三级在线| 国产在线青青草| 91久久夜色精品国产九色| 国产人妻互换一区二区| 国产亚洲一区二区三区不卡| 精品国产一区二区三区四区vr| 蜜桃在线一区| 成人淫片在线看| 成人国产综合| 国产精品mp4| 亚洲va中文在线播放免费| 国内精品久久久久| 蜜臀av在线| 欧美激情极品视频| 天堂av最新在线| 久久福利视频网| 黄色免费在线网站| 日韩专区在线观看| 日本在线视频网| www.久久久久| 暖暖日本在线观看| 久久久精品国产亚洲| 午夜视频在线观看网站| 日韩午夜在线视频| 好吊日视频在线观看| 久久久国产精品亚洲一区| 色综合久久久久综合一本到桃花网| 在线播放国产一区二区三区| 91最新在线| 日韩中文av在线| 国产美女在线观看| 欧美日韩成人网| 成人影音在线| 97视频在线播放| 色戒汤唯在线| 国产精品69av| 欧美另类激情| 91夜夜揉人人捏人人添红杏| 亚洲狼人综合| av免费观看久久| 欧美爱爱网站| 视频一区视频二区视频三区视频四区国产 | 日韩欧美三级一区二区| 欧美三级伦理在线| 91社在线播放| 激情久久久久久久| 97在线免费公开视频| 蜜臀av性久久久久蜜臀av麻豆| 九九热精品在线播放| 极品尤物av久久免费看| 性高潮免费视频| 久久先锋影音av| 殴美一级黄色片| 亚洲综合一区二区三区| 欧美三级韩国三级日本三斤在线观看| 欧美丝袜第一区| 一区二区视频免费| 日韩欧美在线1卡| 青青草在线免费视频| 日韩亚洲综合在线| 国产经典三级在线| 国产精品福利在线观看| 日韩成人在线观看视频| 欧美极品色图| 一本到12不卡视频在线dvd| 国产白丝袜美女久久久久| 老汉av免费一区二区三区| 国产日韩视频一区| 国产欧美一区二区精品性色| 欧美成人精品欧美一级私黄| 色先锋资源久久综合| 精品国产九九九| 伊人久久久久久久久久| 伊人影院在线视频| 国产成人精品在线视频| 中文字幕一区二区三区四区久久 | 一区二区三区在线电影| 国产精品秘入口18禁麻豆免会员| 毛片av一区二区三区| 中文字幕免费在线播放| 亚洲欧美一区二区在线观看| 亚洲第一网站在线观看| 日韩欧美在线一区二区三区| 国产视频第一区| 91高清在线免费观看| 国产欧美视频在线| 日本成人看片网址| 影音先锋中文字幕一区| 中文字幕第一页在线视频| 久久综合色婷婷| 久久免费视频99| 欧美四级电影在线观看| 天天操天天干天天爽| 九九精品视频在线| 日韩成人在线电影| 色综合久久久久久久久五月| 在线播放亚洲| 欧美xxxxxbbbbb| 国产精品国模大尺度视频| 手机在线看片1024| 亚洲精品狠狠操| 日本高清成人vr专区| 成人精品网站在线观看| 俺要去色综合狠狠| 成人在线观看黄| 91在线国产福利| 久久久久久久福利| 欧美一级视频精品观看| 久cao在线| 国产欧美一区二区三区在线| 国产成人短视频在线观看| 亚洲午夜精品久久久久久人妖| 成人一区二区三区中文字幕| 丰满少妇高潮久久三区| 欧美一区二区三区性视频| 欧美一区二区三区在线观看免费| 国产精品吹潮在线观看| 精品一区二区三| 国产一级不卡毛片| 久久久久久久久久看片| 日韩人妻精品中文字幕| 亚洲美女av在线播放| 成人欧美大片| 日本高清久久一区二区三区| 日韩av高清在线观看| 中文字幕av久久爽一区| 欧美在线视频日韩| aaa在线观看| 成人春色激情网| 中文字幕一区二区av| 黄色片子免费看| 一区二区三区四区中文字幕| 亚洲国产福利视频| 久久久久久免费精品| 久久超级碰碰| 久久美女福利视频| 国产日韩v精品一区二区| 国产天堂第一区| 色噜噜亚洲精品中文字幕| 高清在线一区二区| www国产免费| 成人av手机在线观看| 国产精品视频久久久久久久| 亚洲欧美日韩中文视频| 精品久久99| 粉嫩av一区二区三区天美传媒| 福利电影一区二区三区| 国产区在线观看视频| 国产午夜精品一区理论片飘花| 激情久久99| 久久手机在线视频| 久久人人爽爽爽人久久久| 国产天堂第一区| 欧美人与性动交| 天堂一区二区三区四区| 亚洲性图一区二区| 夜夜精品视频一区二区| 亚洲三级黄色片| 国产日韩中文在线| av成人国产| 亚洲一级理论片| 精品va天堂亚洲国产| 亚洲四虎影院| 999一区二区三区| 久久久久久久久岛国免费| 91精品国产乱码久久久久| 久久久久久尹人网香蕉| 国产一区二区三区探花 | 久久女同精品一区二区| 91国内精品视频| 91精品国产91久久久久久| 日本一区二区高清不卡| 日本三级日本三级日本三级极| 在线视频你懂得一区二区三区| fc2ppv国产精品久久| 日韩高清专区| 成人一区二区三区| 国产理论片在线观看| 欧美最猛黑人xxxx黑人猛叫黄| 欧美激情偷拍自拍| 538国产视频| 日韩三级视频在线观看| 成人在线高清| 丰满人妻中伦妇伦精品app| 一二三区精品福利视频|