偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

面試官:什么是虛擬線程?為什么要有虛擬線程?

開(kāi)發(fā) 前端
Java 中的虛擬線程,也叫做協(xié)程或“輕量級(jí)線程”,它誕生于 JDK 19(預(yù)覽 API),正式發(fā)布于 JDK 21,它是一種在 Java 虛擬機(jī)(JVM)層面實(shí)現(xiàn)的邏輯線程,不直接和操作系統(tǒng)的物理線程一一對(duì)應(yīng),因此它可以減少上下文切換所帶來(lái)的性能開(kāi)銷。

Java 中的虛擬線程,也叫做協(xié)程或“輕量級(jí)線程”,它誕生于 JDK 19(預(yù)覽 API),正式發(fā)布于 JDK 21,它是一種在 Java 虛擬機(jī)(JVM)層面實(shí)現(xiàn)的邏輯線程,不直接和操作系統(tǒng)的物理線程一一對(duì)應(yīng),因此它可以減少上下文切換所帶來(lái)的性能開(kāi)銷。

操作系統(tǒng)線程、普通線程(Java 線程)和虛擬線程的關(guān)系如下:

圖片圖片

虛擬線程使用

虛擬線程的創(chuàng)建方式,主要有以下 4 種:

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

具體示例如下。

1.startVirtualThread

創(chuàng)建虛擬線程,并直接啟動(dòng)執(zhí)行任務(wù):

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

2.unstarted

只創(chuàng)建虛擬線程,但不直接啟動(dòng):

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

3.factory

先創(chuàng)建虛擬線程工廠,然后再使用工廠創(chuàng)建虛擬線程,之后再調(diào)用 start() 方法進(jìn)行執(zhí)行:

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

4.newVirtualThreadPerTaskExecutor

使用線程池的方式創(chuàng)建虛擬線程:

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

虛擬線程 VS 普通線程

虛擬線程和普通線程的區(qū)別主要體現(xiàn)在以下幾點(diǎn):

  1. 普通線程是和操作系統(tǒng)的物理線程是一一對(duì)應(yīng)的,而虛擬線程是 JVM 層面的邏輯線程,并不和操作系統(tǒng)的物理線程一一對(duì)應(yīng),它可以看作是輕量級(jí)的線程。
  2. 普通線程默認(rèn)創(chuàng)建的是用戶線程(而守護(hù)線程),而虛擬線程是守護(hù)線程,并且其守護(hù)線程的屬性不能被修改,如果修改就會(huì)報(bào)錯(cuò),如下圖所示:

圖片圖片

  1. 虛擬線程由 JVM 調(diào)度和使用,避免了普通線程頻繁切換的性能開(kāi)銷,所以相比于普通的線程來(lái)說(shuō),運(yùn)行效率更高。

小結(jié)

線程是輕量級(jí)的進(jìn)程,而虛擬線程則是輕量級(jí)的線程,虛擬線程是 JVM 層面實(shí)現(xiàn)的邏輯線程,不直接和操作系統(tǒng)的物理線程一一對(duì)應(yīng),因此使用它可以減少線程上下文切換所帶來(lái)的性能開(kāi)銷。它和普通線程的線程類型也不同,普通線程是默認(rèn)是用戶線程類型,而虛擬線程則是守護(hù)線程(而且不能被修改)。

責(zé)任編輯:武曉燕 來(lái)源: Java中文社群
相關(guān)推薦

2025-09-24 17:05:02

2022-07-06 13:48:24

RedisSentinel機(jī)制

2023-12-06 09:10:28

JWT微服務(wù)

2025-02-21 15:25:54

虛擬線程輕量級(jí)

2021-02-19 10:02:57

HTTPSJava安全

2020-12-23 13:29:15

微服務(wù)架構(gòu)面試官

2021-09-07 10:44:33

Java 注解開(kāi)發(fā)

2024-11-06 12:59:42

多線程銷毀線程切換

2021-12-28 09:50:18

Redis單線程高并發(fā)

2024-02-04 10:29:58

線程通信

2022-01-24 07:01:20

安全多線程版本

2021-12-08 06:53:29

面試動(dòng)態(tài)代理

2024-02-22 15:36:23

Java內(nèi)存模型線程

2022-09-29 07:30:57

數(shù)據(jù)庫(kù)索引字段

2025-08-04 08:05:28

2024-01-11 08:12:20

重量級(jí)監(jiān)視器

2020-10-24 15:50:54

Java值傳遞代碼

2023-11-03 12:29:48

Java虛擬線程

2021-01-21 07:53:29

面試官Promis打印e

2022-03-02 07:36:37

池化技術(shù)Java線程池
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)