成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

網易面試:SpringBoot如何開啟虛擬線程?

開發 前端
虛擬線程是一種在 Java 虛擬機(JVM)層面實現的邏輯線程,不直接和操作系統的物理線程一一對應,因此它可以減少上下文切換所帶來的性能開銷。

虛擬線程(Virtual Thread)也稱協程或纖程,是一種輕量級的線程實現,與傳統的線程以及操作系統級別的線程(也稱為平臺線程)相比,它的創建開銷更小、資源利用率更高,是 Java 并發編程領域的一項重要創新。

PS:虛擬線程正式發布于 Java 長期支持版(Long Term Suort,LTS)Java 21(也就是 JDK 21)。

虛擬線程是一種在 Java 虛擬機(JVM)層面實現的邏輯線程,不直接和操作系統的物理線程一一對應,因此它可以減少上下文切換所帶來的性能開銷。

操作系統線程、普通線程(Java 線程)和虛擬線程的關系如下:

1.虛擬線程使用

虛擬線程的創建有以下 4 種方式:

  • Thread.startVirtualThread(Runnable task)
  • Thread.ofVirtual().unstarted(Runnable task)
  • Thread.ofVirtual().factory()
  • Executors.newVirtualThreadPerTaskExecutor()

具體使用如下。

(1)startVirtualThread

創建虛擬線程,并直接啟動執行任務:

// 創建并啟動虛擬線程
Thread.startVirtualThread(() -> {
    System.out.println("Do virtual thread.");
});

(2)unstarted

只創建虛擬線程,但不直接啟動(創建之后通過 start 啟動):

// 創建虛擬線程
Thread vt = Thread.ofVirtual().unstarted(()->{
    System.out.println("Do virtual thread.");
});
// 運行虛擬線程
vt.start();

(3)factory

先創建虛擬線程工廠,然后再使用工廠創建虛擬線程,之后再調用 start() 方法進行執行:

// 創建虛擬線程工廠
ThreadFactory tf = Thread.ofVirtual().factory();
// 創建虛擬線程
Thread vt = tf.newThread(()->{
    System.out.println("Do virtual thread.");
});
// 運行虛擬線程
vt.start();

(4)newVirtualThreadPerTaskExecutor

創建虛擬線程池:

// 創建一個支持虛擬線程的線程池
ExecutorService executor = Executors.newVirtualThreadPerTaskExecutor();
executor.submit(()->{
    System.out.println("Do virtual thread.");
});

2.虛擬線程 VS 普通線程

虛擬線程和普通線程的區別主要體現在以下幾點:

  • 普通線程是和操作系統的物理線程是一一對應的,而虛擬線程是 JVM 層面的邏輯線程,并不和操作系統的物理線程一一對應,它可以看作是輕量級的線程。
  • 普通線程默認創建的是用戶線程(而守護線程),而虛擬線程是守護線程,并且其守護線程的屬性不能被修改,如果修改就會報錯,如下圖所示:

  • 虛擬線程由 JVM 調度和使用,避免了普通線程頻繁切換的性能開銷,所以相比于普通的線程來說,運行效率更高。

3.SpringBoot開啟虛擬線程

以最新版的 Spring Boot 3.x 為例,我們開啟虛擬線程很簡單,只需要在 Spring Boot 配置文件中設置“spring.threads.virtual.enabled”為“true”即可開啟,以 application.yml 為例,啟用虛擬線程配置如下:

spring:
  threads:
    virtual:
      enabled: true # 啟用虛擬線程

這樣 Spinrg Boot 在啟動 Tomcat 容器時,會使用一個虛擬線程執行器來代表原有的平臺線程池。

PS:這里是虛擬線程執行器,不是虛擬線程池。

如果以上配置未生效的話,還可以通過修改 Tomcat 配置類,讓其使用虛擬線程來處理每一個請求,配置代碼如下:

import java.util.concurrent.Executors;

import org.springframework.boot.web.embedded.tomcat.TomcatProtocolHandlerCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class TomcatConfiguration {
    @Bean
    public TomcatProtocolHandlerCustomizer<?> protocolHandlerVirtualThreadExecutorCustomizer() {
        return protocolHandler -> {
            // 使用虛擬線程來處理每一個請求
            protocolHandler.setExecutor(Executors.newVirtualThreadPerTaskExecutor());
        };
    }
}

4.異步任務開啟虛擬線程

如果你想為 Spring Boot 中的異步任務 @Async 也配置虛擬線程的話,可以在 AsyncConfigurer 配置類中設置,配置代碼如下:

import java.util.concurrent.Executor;
import java.util.concurrent.Executors;

import org.springframework.context.annotation.Configuration;
import org.springframework.core.task.support.TaskExecutorAdapter;
import org.springframework.scheduling.annotation.AsyncConfigurer;
import org.springframework.scheduling.annotation.EnableAsync;

@Configuration
@EnableAsync  // 開啟異步任務
public class AsyncTaskConfiguration implements AsyncConfigurer {
    @Override
    public Executor getAsyncExecutor() {
        return new TaskExecutorAdapter(Executors.newThreadPerTaskExecutor(Thread.ofVirtual().name("virtual-async#", 1).factory()));
    }
}
責任編輯:姜華 來源: Java中文社群
相關推薦

2023-12-20 14:35:37

Java虛擬線程

2023-10-16 10:09:41

線程進程

2022-02-28 07:01:22

線程中斷interrupt

2025-06-09 09:57:16

2014-12-16 12:54:09

BIOS虛擬化技術

2025-03-17 00:00:00

2024-03-18 14:06:00

停機Spring服務器

2024-09-11 22:51:19

線程通訊Object

2025-02-21 15:25:54

虛擬線程輕量級

2010-02-26 15:28:15

Python虛擬機

2022-09-12 22:27:05

編程式事務聲明式事務對象

2024-01-19 14:03:59

Redis緩存系統Spring

2016-12-16 16:07:37

網易云

2024-05-16 17:58:30

線程任務線程通訊線程池

2024-05-10 08:10:05

Spring虛擬線程JDK

2024-09-09 15:09:30

2011-09-09 10:13:23

ubuntussh服務

2024-01-31 08:26:44

2025-01-03 16:32:13

SpringBoot虛擬線程Java

2023-10-13 08:20:02

Spring線程池id
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 激情小说综合网 | 中文字幕一区二区三区四区五区 | 国产精品久久久久久久久久免费看 | 午夜精品一区二区三区在线视频 | 亚洲久久 | 久久免费精品视频 | 亚洲精彩免费视频 | 欧美一级二级三级视频 | 美女黄网 | 日日噜噜夜夜爽爽狠狠 | 欧美一区久久 | 一区二区久久精品 | 成人做爰69片免费观看 | 久久久久久影院 | 免费人成在线观看网站 | 视频一区在线 | 久久精品国产亚洲 | 欧美精品一区二区三区四区五区 | 亚洲高清视频在线 | 青草青草久热精品视频在线观看 | 国产欧美日韩一区二区三区在线 | 日本不卡一区二区三区在线观看 | 中文字幕亚洲一区二区三区 | 国产一二三区精品视频 | 国产成人精品一区二区三区在线 | 国产午夜精品一区二区三区嫩草 | 日韩中文字幕 | 久久国产高清 | 久久久91精品国产一区二区三区 | 精品欧美一区二区精品久久久 | 婷婷激情在线 | 欧美精品综合在线 | 91欧美精品成人综合在线观看 | 国产成人免费视频网站高清观看视频 | 精品国产不卡一区二区三区 | 亚洲国产aⅴ成人精品无吗 国产精品永久在线观看 | 久久久www | 日韩毛片中文字幕 | 午夜免费观看 | 一级做a爰片久久毛片 | 亚洲成人午夜电影 |