日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

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

來源: 責編: 時間:2024-06-12 08:44:59 177觀看
導讀虛擬線程(Virtual Thread)也稱協程或纖程,是一種輕量級的線程實現,與傳統的線程以及操作系統級別的線程(也稱為平臺線程)相比,它的創建開銷更小、資源利用率更高,是 Java 并發編程領域的一項重要創新。PS:虛擬線程正式發布于 J

eqp28資訊網——每日最新資訊28at.com

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

PS:虛擬線程正式發布于 Java 長期支持版(Long Term Suort,LTS)Java 21(也就是 JDK 21)。eqp28資訊網——每日最新資訊28at.com

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

操作系統線程、普通線程(Java 線程)和虛擬線程的關系如下:eqp28資訊網——每日最新資訊28at.com

eqp28資訊網——每日最新資訊28at.com

1.虛擬線程使用

虛擬線程的創建有以下 4 種方式:eqp28資訊網——每日最新資訊28at.com

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

具體使用如下。eqp28資訊網——每日最新資訊28at.com

(1)startVirtualThread

創建虛擬線程,并直接啟動執行任務:eqp28資訊網——每日最新資訊28at.com

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

(2)unstarted

只創建虛擬線程,但不直接啟動(創建之后通過 start 啟動):eqp28資訊網——每日最新資訊28at.com

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

(3)factory

先創建虛擬線程工廠,然后再使用工廠創建虛擬線程,之后再調用 start() 方法進行執行:eqp28資訊網——每日最新資訊28at.com

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

(4)newVirtualThreadPerTaskExecutor

創建虛擬線程池:eqp28資訊網——每日最新資訊28at.com

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

2.虛擬線程 VS 普通線程

虛擬線程和普通線程的區別主要體現在以下幾點:eqp28資訊網——每日最新資訊28at.com

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

eqp28資訊網——每日最新資訊28at.com

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

3.SpringBoot開啟虛擬線程

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

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

這樣 Spinrg Boot 在啟動 Tomcat 容器時,會使用一個虛擬線程執行器來代表原有的平臺線程池。eqp28資訊網——每日最新資訊28at.com

PS:這里是虛擬線程執行器,不是虛擬線程池。eqp28資訊網——每日最新資訊28at.com

如果以上配置未生效的話,還可以通過修改 Tomcat 配置類,讓其使用虛擬線程來處理每一個請求,配置代碼如下:eqp28資訊網——每日最新資訊28at.com

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

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

如果你想為 Spring Boot 中的異步任務 @Async 也配置虛擬線程的話,可以在 AsyncConfigurer 配置類中設置,配置代碼如下:eqp28資訊網——每日最新資訊28at.com

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()));    }}

本文鏈接:http://www.www897cc.com/showinfo-26-93207-0.html網易面試:SpringBoot如何開啟虛擬線程?

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 警惕!SpringBoot錯誤發布事件,造成死鎖Deadlock

下一篇: 前端JS發起的請求能暫停嗎?

標簽:
  • 熱門焦點
  • 一加Ace2 Pro官宣:普及16G內存 引領24G

    一加官方今天繼續為本月發布的新機一加Ace2 Pro帶來預熱,公布了內存方面的信息。“淘汰 8GB ,12GB 起步,16GB 普及,24GB 引領,還有呢?#一加Ace2Pro#,2023 年 8 月,敬請期待。”同時
  • 小米官宣:2023年上半年出貨量中國第一!

    今日早間,小米電視官方微博帶來消息,稱2023年小米電視上半年出貨量達到了中國第一,同時還表示小米電視的巨屏風暴即將開始。“公布一個好消息2023年#小米電視上半年出貨量中國
  • 三分鐘白話RocketMQ系列—— 如何發送消息

    我們知道RocketMQ主要分為消息 生產、存儲(消息堆積)、消費 三大塊領域。那接下來,我們白話一下,RocketMQ是如何發送消息的,揭秘消息生產全過程。注意,如果白話中不小心提到相關代
  • 慕巖炮轟抖音,百合網今何在?

    來源:價值研究所 作者:Hernanderz&ldquo;難道就因為自己的一個產品牛逼了,從客服到總裁,都不愿意正視自己產品和運營上的問題,選擇逃避了嗎?&rdquo;這一番話,出自百合網聯合創
  • 得物寵物生意「狂飆」,發力“它經濟”

    作者|花花小萌主近日,得物宣布正式上線寵物鑒別,通過得物App內的&ldquo;在線鑒別&rdquo;,可找到鑒別寵物的選項。通過上傳自家寵物的部位細節,就能收獲擁有專業資質認證的得物鑒
  • 猿輔導與新東方的兩種“歸途”

    作者|卓心月 出品|零態LT(ID:LingTai_LT)如何成為一家偉大企業?答案一定是對&ldquo;勢&rdquo;的把握,這其中最關鍵的當屬對企業戰略的制定,且能夠站在未來看現在,即使這其中的
  • 新電商三兄弟,“抖快紅”成團!

    來源:價值研究所作 者:Hernanderz 隨著內容電商的概念興起,抖音、快手、小紅書組成的&ldquo;新電商三兄弟&rdquo;成為業內一股不可忽視的勢力,給阿里、京東、拼多多帶去了巨大壓
  • 8月見!小米MIX Fold 3獲得3C認證:支持67W快充

    這段時間以來,包括三星、一加、榮耀等等有不少品牌旗下的最新折疊屏旗艦都得到了不少爆料,而小米新一代折疊屏旗艦——小米MIX Fold 3此前也屢屢被傳
  • 華為HarmonyOS 4.0將于8月4日發布 或搭載AI大模型技術

    華為宣布HarmonyOS4.0將于8月4日正式發布。此前,華為已經針對開發者公布了HarmonyOS4.0,以便于開發者提前進行適配,也因此被曝光出了一些新系統的特性
Top 主站蜘蛛池模板: 洪泽县| 江津市| 梁平县| 湖州市| 荃湾区| 阿拉善左旗| 夏邑县| 绥化市| 大田县| 甘德县| 渑池县| 且末县| 石阡县| 彩票| 鹤岗市| 定陶县| 甘洛县| 湟中县| 双鸭山市| 萍乡市| 京山县| 察雅县| 乐都县| 黔西县| 宁远县| 诸城市| 修武县| 休宁县| 屏山县| 龙川县| 娄底市| 锦州市| 商南县| 大渡口区| 沛县| 惠来县| 沙田区| 亳州市| 阆中市| 土默特右旗| 长寿区|