日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

面试官:什么是虚拟线程?为什么要有虚拟线程?

發布時間:2023/12/24 windows 40 coder
生活随笔 收集整理的這篇文章主要介紹了 面试官:什么是虚拟线程?为什么要有虚拟线程? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Java 中的虛擬線程,也叫做協程或“輕量級線程”,它誕生于 JDK 19(預覽 API),正式發布于 JDK 21,它是一種在 Java 虛擬機(JVM)層面實現的邏輯線程,不直接和操作系統的物理線程一一對應,因此它可以減少上下文切換所帶來的性能開銷。

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

虛擬線程使用

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

  1. Thread.startVirtualThread(Runnable task)
  2. Thread.ofVirtual().unstarted(Runnable task)
  3. Thread.ofVirtual().factory()
  4. Executors.newVirtualThreadPerTaskExecutor()

具體示例如下。

1.startVirtualThread

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

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

2.unstarted

只創建虛擬線程,但不直接啟動:

// 創建虛擬線程
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.");
});

虛擬線程 VS 普通線程

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

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

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

小結

線程是輕量級的進程,而虛擬線程則是輕量級的線程,虛擬線程是 JVM 層面實現的邏輯線程,不直接和操作系統的物理線程一一對應,因此使用它可以減少線程上下文切換所帶來的性能開銷。它和普通線程的線程類型也不同,普通線程是默認是用戶線程類型,而虛擬線程則是守護線程(而且不能被修改)。

本文已收錄到我的面試小站 www.javacn.site,其中包含的內容有:Redis、JVM、并發、并發、MySQL、Spring、Spring MVC、Spring Boot、Spring Cloud、MyBatis、設計模式、消息隊列等模塊。

總結

以上是生活随笔為你收集整理的面试官:什么是虚拟线程?为什么要有虚拟线程?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。