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