Java虚拟线程:一种低成本、轻量级、用户态的Java线程
點擊上方“朱小廝的博客”,選擇“設為星標”
后臺回復"書",獲取
后臺回復“k8s”,可領取k8s資料
OpenJDK在2021-11-15創建了一個草稿版JEP,如下圖所示(鏈接地址:https://openjdk.java.net/jeps/8277131),我們接下來的文章將VIrtual Thread翻譯為虛擬線程:
目標
1、為java.lang.Thread增加一種額外的實現,即虛擬線程,它能做到在幾個G的JVM堆上創建幾百萬個活動的虛擬線程(這在現在的JDK中幾乎不可能實現),并且表現出和現在的線程幾乎一樣的行為。2、對虛擬線程問題定位也可以通過已經存在的JDK工具,盡可能保持和現在的線程相似的方式。
非目標
虛擬線程不是為了改變現在這種操作系統級別的線程的實現。虛擬線程不是為了自動將已經存在的線程構造方法自動轉為虛擬線程。虛擬線程不是為了改變JMM。虛擬線程不是為了增加一種新的內部線程通信機制。除了并行流之外,虛擬線程也不是為了提供一種新的數據并行結構。
動機
Java語言作為過去幾十年最成功預言之一,開發者廣泛使用Java語言來編寫并發應用。那么,java.lang.Thread就是他們最核心的依賴。Java線程的一些能力為我們提供了對程序很寶貴的洞察力,例如:線程的棧信息,線程dump,debug能力等。
但是,當前Java線程的實現是每個Java線程需要消耗一個操作系統線程。而操作系統線程這種資源是非常稀缺,非常寶貴的。而虛擬線程是java.lang.Thread一種用戶態的實現,這就意味著當我們在虛擬線程上使用同步API時,是不會阻塞任何操作系統線程,硬件利用率接近最佳。
并且為了讓開發者更方便的使用虛擬線程,它的設計讓我們無需學習任何新的編程模型,它與Java的原始編程模型幾乎一樣。
創建
通過如下代碼即可創建Java虛擬線程,通過如下代碼可知,虛擬線程就是Thread的一種實現:
Thread?thread?=?Thread.ofVirtual().name("duke").unstarted(runnable);我們還可以通過Thread中的isVirtual()方法判斷判斷線程是否是虛擬線程。
當然,也可以通過工廠類創建一個虛擬線程:
ThreadFactory?factory?=?Thread.ofVirtual().factory();英文原文:https://openjdk.java.net/jeps/8277131
想知道更多?掃描下面的二維碼關注我后臺回復"技術",加入技術群 后臺回復“k8s”,可領取k8s資料【精彩推薦】ClickHouse到底是什么?為什么如此牛逼!
原來ElasticSearch還可以這么理解
面試官:InnoDB中一棵B+樹可以存放多少行數據?
架構之道:分離業務邏輯和技術細節
星巴克不使用兩階段提交
面試官:Redis新版本開始引入多線程,談談你的看法?
喜馬拉雅自研網關架構演進過程
收藏:存儲知識全面總結
微博千萬級規模高性能高并發的網絡架構設計
總結
以上是生活随笔為你收集整理的Java虚拟线程:一种低成本、轻量级、用户态的Java线程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 过滤请求绝技 — 布隆过滤器与布谷鸟过滤
- 下一篇: 深入理解Java内存架构