3 分鐘理解 Java 虛擬執行緒
來源:waynblog
虛擬執行緒是 Java 語言中實現的一種輕量級執行緒,在 Java 專案中可以減少編寫、維護和除錯高吞吐量併發應用程式的工作量。
有關虛擬執行緒的背景介紹,大家可以參閱 JEP 444。
在作業系統中,執行緒是其可排程的最小處理單元。同一時刻會有很多執行緒同時執行,但它們之間基本相互獨立執行。
在 Java 中,操作執行緒的相關 API 都在 java.lang.Thread 類中。在 Java 21 以後,執行緒有兩種,一種是平臺執行緒,一種是虛擬執行緒。
本文大綱,
什麼是平臺執行緒?
平臺執行緒被實現為作業系統執行緒的簡單包裝器。平臺執行緒上執行的 Java 程式碼,在其底層邏輯上,其實就是執行在作業系統的執行緒上,並且平臺執行緒在其整個生命週期內都與作業系統執行緒一一對應。
因此在 Java 專案中,可用平臺執行緒的數量依賴於作業系統執行緒的數量。根據作業系統和 JVM 啟動引數配置的不同,建立一個平臺執行緒預設會消耗 1 MB 的空間。
因此平臺執行緒的資源相當寶貴,我們無法大量的建立平臺執行緒。
在 Java 21 虛擬執行緒出來以前,可能大家都沒聽說過平臺執行緒,那麼到底什麼是平臺執行緒嘞?這裡我給大家一句話解釋清楚。
在 Java 21 虛擬執行緒出來以前,Java 所提供的執行緒都是平臺執行緒,一個執行緒對應一個作業系統執行緒,並且平臺執行緒很珍貴,不能大量建立。(大家為了節約執行緒資源,也就有了執行緒池的概念)
什麼是虛擬執行緒?
與平臺執行緒一樣,虛擬執行緒也是 java.lang.Thread 的一個例項物件。但是,虛擬執行緒並不依賴於特定的作業系統執行緒。
虛擬執行緒底層仍然在作業系統的執行緒上執行程式碼。但是與平臺執行緒不相同的是,在平臺執行緒中執行的程式碼呼叫阻塞 I/O 操作時,JVM 就會掛起該平臺執行緒(也就會掛起作業系統執行緒),直到阻塞 I/O 可以恢復為止。
而在虛擬執行緒中呼叫阻塞 I/O 操作時,JVM 雖然也會掛起該虛擬執行緒,但是與平臺執行緒不同的是,被掛起虛擬執行緒關聯的作業系統執行緒是可以為其他虛擬執行緒繼續服務的。
虛擬執行緒的實現方式與虛擬記憶體類似。為了模擬大量記憶體,作業系統將較大的虛擬地址空間對映到有限的 RAM。同樣,為了模擬大量執行緒,Java 執行時將大量虛擬執行緒對映到少量作業系統執行緒。
因此與平臺執行緒消耗的資源很多不同,虛擬執行緒在使用時只需要很少的記憶體資源。單個 JVM 就可以輕鬆建立數百萬個虛擬執行緒。
使用虛擬執行緒是,通常建議呼叫堆疊不要過深,只執行單個 HTTP 客戶端呼叫或單個 JDBC 查詢即可。儘管虛擬執行緒支援執行緒區域性變數和可繼承的執行緒區域性變數,但我們應該仔細考慮後再使用它們,因為單個 JVM 可能執行數百萬個虛擬執行緒。
虛擬執行緒適合用於執行有大量阻塞 I/O 操作的任務,而不是長時間執行的 CPU 密集型任務。
為什麼建議使用虛擬執行緒?
在高吞吐量、高併發應用程式中推薦使用虛擬執行緒,尤其是那些包含大量併發任務且大部分時間都在等待阻塞 I/O 操作的應用程式中。
使用虛擬執行緒可以讓應用程式就算使用同步阻塞 API,也能對作業系統的硬體資源利用達到近乎完美水平。
可以說,虛擬執行緒的引入,以後程式設計師就算是使用 Java 中同步阻塞 API 也可以開發出高效能、高吞吐量的應用程式。
最後總結一下,虛擬執行緒是一種輕量級執行緒,帶給了程式設計師一種新的程式設計體驗。
編寫高效能、高吞吐量應用程式時使用虛擬執行緒配合同步阻塞 API 就能得到與非同步程式設計模型相媲美的效能,並且避免了非同步程式設計模型的程式設計複雜度。比如在 Spring Boot3.2 中,Tomcat 就可以透過啟用虛擬執行緒帶來可觀的效能提升。
來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/70024923/viewspace-3001753/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [深入理解Java虛擬機器]執行緒Java虛擬機執行緒
- [Java基礎]虛擬執行緒Java執行緒
- java 21 虛擬執行緒初體驗Java執行緒
- Java21上手體驗-分代ZGC和虛擬執行緒JavaGC執行緒
- [深入理解Java虛擬機器]第十二章 Java記憶體模型與執行緒-Java與執行緒Java虛擬機記憶體模型執行緒
- Java 21 虛擬執行緒:使用指南(一)Java執行緒
- Java“虛擬執行緒”被提交到JEP草案Java執行緒
- [深入理解Java虛擬機器]第十三章 執行緒安全與鎖優化-執行緒安全Java虛擬機執行緒優化
- Java 21 正式 GA,虛擬執行緒真的來了Java執行緒
- Java 21 新特性:虛擬執行緒(Virtual Threads)Java執行緒thread
- Java中CompletableFuture與虛擬執行緒比較Java執行緒
- [Java虛擬機器]Java記憶體模型與執行緒Java虛擬機記憶體模型執行緒
- 深入理解多執行緒(五)—— Java虛擬機器的鎖優化技術執行緒Java虛擬機優化
- Java 21 神仙特性:虛擬執行緒使用指南(一)Java執行緒
- Java 21 官方速覽:全面擁抱虛擬執行緒Java執行緒
- Java 21 虛擬執行緒如何限流控制吞吐量Java執行緒
- Java虛擬機器08——Java記憶體模型與執行緒Java虛擬機記憶體模型執行緒
- 虛擬執行緒原理及效能分析執行緒
- 3分鐘搞清楚程式與執行緒的區別執行緒
- java 最大執行緒數理解Java執行緒
- 深入理解Java虛擬機器8 虛擬機器位元組碼執行引擎Java虛擬機
- 深入理解JVM(③)執行緒與Java的執行緒JVM執行緒Java
- Java虛擬機器09——執行緒安全與鎖優化Java虛擬機執行緒優化
- java 多執行緒-3Java執行緒
- 使用Loom建立虛擬執行緒 - davidOOM執行緒
- 理解Java執行緒的中斷Java執行緒
- Java21虛擬執行緒:我的鎖去哪兒了?Java執行緒
- Java21的虛擬執行緒Virtual Thread初體驗Java執行緒thread
- Java虛擬機器執行時資料區域劃分Java虛擬機
- Java多執行緒學習(3)執行緒同步與執行緒通訊Java執行緒
- 5分鐘搞懂多執行緒安全問題執行緒
- 執行緒和執行緒池的理解與java簡單例子執行緒Java單例
- Java多執行緒-1(3)Java執行緒
- java多執行緒3:synchronizedJava執行緒synchronized
- 聊聊JDK19特性之虛擬執行緒JDK執行緒
- 10分鐘理解JS引擎的執行機制JS
- java虛擬機器的執行原理Java虛擬機
- 支援JDK19虛擬執行緒的web框架,之四:看原始碼,瞭解quarkus如何支援虛擬執行緒JDK執行緒Web框架原始碼