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