Java 中的虛擬線程,也叫做協程或“輕量級線程”,它誕生于 JDK 19(預覽 API),正式發布于 JDK 21,它是一種在 Java 虛擬機(JVM)層面實現的邏輯線程,不直接和操作系統的物理線程一一對應,因此它可以減少上下文切換所帶來的性能開銷。
操作系統線程、普通線程(Java 線程)和虛擬線程的關系如下:
圖片
虛擬線程的創建方式,主要有以下 4 種:
具體示例如下。
創建虛擬線程,并直接啟動執行任務:
// 創建并啟動虛擬線程Thread.startVirtualThread(() -> { System.out.println("Do virtual thread.");});
只創建虛擬線程,但不直接啟動:
// 創建虛擬線程Thread vt = Thread.ofVirtual().unstarted(()->{ System.out.println("Do virtual thread.");});// 運行虛擬線程vt.start();
先創建虛擬線程工廠,然后再使用工廠創建虛擬線程,之后再調用 start() 方法進行執行:
// 創建虛擬線程工廠ThreadFactory tf = Thread.ofVirtual().factory();// 創建虛擬線程Thread vt = tf.newThread(()->{ System.out.println("Do virtual thread.");});// 運行虛擬線程vt.start();
使用線程池的方式創建虛擬線程:
// 創建一個支持虛擬線程的線程池ExecutorService executor = Executors.newVirtualThreadPerTaskExecutor();executor.submit(()->{ System.out.println("Do virtual thread.");});
虛擬線程和普通線程的區別主要體現在以下幾點:
圖片
線程是輕量級的進程,而虛擬線程則是輕量級的線程,虛擬線程是 JVM 層面實現的邏輯線程,不直接和操作系統的物理線程一一對應,因此使用它可以減少線程上下文切換所帶來的性能開銷。它和普通線程的線程類型也不同,普通線程是默認是用戶線程類型,而虛擬線程則是守護線程(而且不能被修改)。
本文鏈接:http://www.www897cc.com/showinfo-26-50757-0.html面試官:什么是虛擬線程?為什么要有虛擬線程?
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com
上一篇: CORS 跨域工作機制與安全防范