日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

Java21新特性——虛擬線程

來源: 責(zé)編: 時(shí)間:2023-10-24 09:00:32 331觀看
導(dǎo)讀Java21最重要的新特性之一是虛擬線程(Virtual Threads)。 傳統(tǒng)的Java線程受制于操作系統(tǒng)的線程數(shù),并發(fā)能力和可伸縮性有限,許多時(shí)候資源無法充分利用。而虛擬線程則提供了一種更高效、更輕量級的線程模型。虛擬線程,也稱為

Java21最重要的新特性之一是虛擬線程(Virtual Threads)。 傳統(tǒng)的Java線程受制于操作系統(tǒng)的線程數(shù),并發(fā)能力和可伸縮性有限,許多時(shí)候資源無法充分利用。而虛擬線程則提供了一種更高效、更輕量級的線程模型。虛擬線程,也稱為“用戶模式線程(user-mode threads)”或“纖程(fibers)”。該功能旨在簡化并發(fā)編程并提供更好的可擴(kuò)展性。虛擬線程是輕量級的,它們可以比傳統(tǒng)線程創(chuàng)建更多數(shù)量,并且開銷要少得多。Ok028資訊網(wǎng)——每日最新資訊28at.com

本文主要介紹Java傳統(tǒng)的線程和虛擬線程的特點(diǎn)和區(qū)別,以及虛擬線程的編碼方法和注意事項(xiàng)。Ok028資訊網(wǎng)——每日最新資訊28at.com

Ok028資訊網(wǎng)——每日最新資訊28at.com

傳統(tǒng)的線程

在舊的Java版本中使用的線程依賴于操作系統(tǒng)的線程,創(chuàng)建線程、銷毀線程以及線程切換都需要大量性能開銷。而操作系統(tǒng)的線程數(shù)有限,當(dāng)應(yīng)用系統(tǒng)需要大量線程的時(shí)候,可能會(huì)導(dǎo)致系統(tǒng)資源耗竭,性能下降,甚至導(dǎo)致系統(tǒng)奔潰。在舊的Java版本中,我們所使用java.lang.Thread來定義線程,這個(gè)就是由操作系統(tǒng)所支持的線程。這種線程通常以1:1的比例映射到OS調(diào)度的內(nèi)核。OS線程相當(dāng)“重”。根據(jù)操作系統(tǒng)配置,默認(rèn)情況下,每個(gè)線程消耗2到10 MB, 因此,如果想在發(fā)應(yīng)用程序中使用一百萬個(gè)線程,那么就要求有超過2TB的內(nèi)存可供使用!很明顯,這就限制了線程數(shù)量。Ok028資訊網(wǎng)——每日最新資訊28at.com

Ok028資訊網(wǎng)——每日最新資訊28at.com

在基于Java的Web應(yīng)用中,每個(gè)請求使用一個(gè)線程有很多優(yōu)點(diǎn),比如狀態(tài)管理和清理更加容易。但它也造成了可擴(kuò)展性的限制。容易使CPU或網(wǎng)絡(luò)資源耗盡。 Ok028資訊網(wǎng)——每日最新資訊28at.com

Ok028資訊網(wǎng)——每日最新資訊28at.com

虛擬線程

Java21引入虛擬線程,使得Java應(yīng)用程序的線程不再受制于操作系統(tǒng),可以在應(yīng)用中創(chuàng)建多達(dá)數(shù)十億的線程,更好地適應(yīng)各種高并發(fā)場景,提供更高的并發(fā)能力。虛擬線程具有以下優(yōu)點(diǎn):Ok028資訊網(wǎng)——每日最新資訊28at.com

  • 更高的性能:虛擬線程不再受制于操作系統(tǒng)的線程數(shù),并且減少了線程創(chuàng)建、銷毀、共享等操作的性能開銷。從而獲得更高的并發(fā)性能。
  • 更高可伸縮性:虛擬線程可以創(chuàng)建多達(dá)數(shù)十億的線程,更能適應(yīng)Java應(yīng)用的大規(guī)模并發(fā)場景。
  • 資源消耗更低:虛擬線程比操作系統(tǒng)的線程更加輕量級,資源利用率較高,CPU和內(nèi)存占用較少。

虛擬線程是一個(gè)java.lang.Thread變體,是Project Loom的一部分,不受操作系統(tǒng)的管理或調(diào)度,而是由JVM負(fù)責(zé)調(diào)度。當(dāng)然,任何底層的邏輯都還必須在操作系統(tǒng)線程中運(yùn)行,只是JVM利用載體線程(carrier threads,也就是平臺線程)之上“攜帶”虛擬線程。Ok028資訊網(wǎng)——每日最新資訊28at.com

Ok028資訊網(wǎng)——每日最新資訊28at.com

Ok028資訊網(wǎng)——每日最新資訊28at.com

編碼示例

虛擬線程的學(xué)習(xí)成本比較低,只需要像對待非虛擬線程一樣對待他們就可以了。Ok028資訊網(wǎng)——每日最新資訊28at.com

(1) 傳統(tǒng)線程的開發(fā)傳統(tǒng)線程的用法在使用虛擬線程之前我們先來回顧一下傳統(tǒng)的線程的寫法。Ok028資訊網(wǎng)——每日最新資訊28at.com

Runnable fn = () -> {  // 業(yè)務(wù)代碼};Thread thread = new Thread(fn).start();

Project Loom 簡化了并發(fā)方法,它提供了一種新方法來創(chuàng)建平臺的線程:Ok028資訊網(wǎng)——每日最新資訊28at.com

Thread thread = Thread.ofPlatform().                      .start(runnable);

或者:Ok028資訊網(wǎng)——每日最新資訊28at.com

Thread thread = Thread.ofPlatform().                      .daemon()                      .name("my-custom-thread")

Ok028資訊網(wǎng)——每日最新資訊28at.com

(2) 虛擬線程的用法Ok028資訊網(wǎng)——每日最新資訊28at.com

API寫法:Ok028資訊網(wǎng)——每日最新資訊28at.com

Runnable fn = () -> {// 業(yè)務(wù)代碼};Thread thread = Thread.ofVirtual(fn)                      .start();

Project Loom 寫法:Ok028資訊網(wǎng)——每日最新資訊28at.com

Thread thread = Thread.startVirtualThread(() -> {// 業(yè)務(wù)代碼});

Ok028資訊網(wǎng)——每日最新資訊28at.com

創(chuàng)建虛擬線程的另一種方法是使用Executor:Ok028資訊網(wǎng)——每日最新資訊28at.com

var executorService = Executors.newVirtualThreadPerTaskExecutor();executorService.submit(() -> {// 業(yè)務(wù)代碼});

Ok028資訊網(wǎng)——每日最新資訊28at.com

Ok028資訊網(wǎng)——每日最新資訊28at.com

因?yàn)樗械奶摂M線程都是守護(hù)線程,所以如果想在主線程上等待,就需要調(diào)用join()方法,Join方法的作用就是讓主線程等待,當(dāng)有新的線程加入時(shí),主線程會(huì)進(jìn)入等待狀態(tài),一直到調(diào)用方法的副線程執(zhí)行結(jié)束為止。Ok028資訊網(wǎng)——每日最新資訊28at.com

thread.join();

Ok028資訊網(wǎng)——每日最新資訊28at.com

虛擬線程開發(fā)注意事項(xiàng)

  • 注意控制線程數(shù):虛擬線程可以創(chuàng)建大量線程,很容易讓開發(fā)人員不在意其數(shù)量,而過多的線程仍然會(huì)導(dǎo)致性能下降或資源耗盡。因此,仍需根據(jù)資源數(shù)量合理控制應(yīng)用程序的并發(fā)度。
  • 注意線程安全:使用虛擬線程時(shí)要注意線程安全性和正確性,避免共享可變狀態(tài)、根據(jù)需要使用同步機(jī)制。
  • 注意代碼遷移:在從傳統(tǒng)線程遷移到使用虛擬線程的時(shí)候,需要注意代碼與新環(huán)境、新規(guī)范、新需求的一致性。 

總結(jié)

虛擬線程是Java并發(fā)開發(fā)方面的通用、強(qiáng)大的新方法,在Java21版本中已經(jīng)十分成熟了。對于需要從舊版本JDK遷移到新版本JDK的應(yīng)用程序來說,改造難度并不大,同時(shí)還可以充分利用所有可用硬件資源,提高Java應(yīng)用程序的并發(fā)性和可伸縮性。Ok028資訊網(wǎng)——每日最新資訊28at.com

Ok028資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-14722-0.htmlJava21新特性——虛擬線程

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 揭秘 Go 中的 new() 和 make() 函數(shù)

下一篇: Go中使用sync.Map實(shí)現(xiàn)線程安全的緩存

標(biāo)簽:
  • 熱門焦點(diǎn)
  • Redmi Pad評測:紅米充滿野心的一次嘗試

    從Note系列到K系列,從藍(lán)牙耳機(jī)到筆記本電腦,紅米不知不覺之間也已經(jīng)形成了自己頗有競爭力的產(chǎn)品體系,在中端和次旗艦市場上甚至要比小米新機(jī)的表現(xiàn)來得更好,正所謂“大丈夫生居
  • 7月安卓手機(jī)性價(jià)比榜:努比亞+紅魔兩款新機(jī)入榜

    7月登場的新機(jī)有努比亞Z50S Pro和紅魔8S Pro,除了三星之外目前唯二的兩款搭載超頻版驍龍8Gen2處理器的產(chǎn)品,而且努比亞和紅魔也一貫有著不錯(cuò)的性價(jià)比,所以在本次的性價(jià)比榜單
  • 掘力計(jì)劃第 20 期:Flutter 混合開發(fā)的混亂之治

    在掘力計(jì)劃系列活動(dòng)第20場,《Flutter 開發(fā)實(shí)戰(zhàn)詳解》作者,掘金優(yōu)秀作者,Github GSY 系列目負(fù)責(zé)人戀貓的小郭分享了Flutter 混合開發(fā)的混亂之治。Flutter 基于自研的 Skia 引擎
  • 分布式系統(tǒng)中的CAP理論,面試必問,你理解了嘛?

    對于剛剛接觸分布式系統(tǒng)的小伙伴們來說,一提起分布式系統(tǒng),就感覺高大上,深不可測。而且看了很多書和視頻還是一臉懵逼。這篇文章主要使用大白話的方式,帶你理解一下分布式系統(tǒng)
  • 如何正確使用:Has和:Nth-Last-Child

    我們可以用CSS檢查,以了解一組元素的數(shù)量是否小于或等于一個(gè)數(shù)字。例如,一個(gè)擁有三個(gè)或更多子項(xiàng)的grid。你可能會(huì)想,為什么需要這樣做呢?在某些情況下,一個(gè)組件或一個(gè)布局可能會(huì)
  • 三言兩語說透柯里化和反柯里化

    JavaScript中的柯里化(Currying)和反柯里化(Uncurrying)是兩種很有用的技術(shù),可以幫助我們寫出更加優(yōu)雅、泛用的函數(shù)。本文將首先介紹柯里化和反柯里化的概念、實(shí)現(xiàn)原理和應(yīng)用
  • 阿里瓴羊One推出背后,零售企業(yè)迎數(shù)字化新解

    作者:劉曠近年來隨著數(shù)字經(jīng)濟(jì)的高速發(fā)展,各式各樣的SaaS應(yīng)用服務(wù)更是層出不窮,但本質(zhì)上SaaS大多局限于單一業(yè)務(wù)流層面,對用戶核心關(guān)切的增長問題等則沒有提供更好的解法。在Saa
  • 三星Galaxy Z Fold5官方渲染圖曝光:13.4mm折疊厚度依舊感人

    據(jù)官方此前宣布,三星將于7月26日在韓國首爾舉辦Unpacked活動(dòng),屆時(shí)將帶來帶來包括Galaxy Buds 3、Galaxy Watch 6、Galaxy Tab S9、Galaxy Z Flip 5、
  • 3699元!iQOO Neo8 Pro頂配版今日首銷:1TB UFS 4.0同價(jià)位唯一

    5月23日,iQOO推出了全新的iQOO Neo8系列,包含iQOO Neo8和iQOO Neo8 Pro兩個(gè)版本,其中標(biāo)準(zhǔn)版搭載高通驍龍8+,而Pro版更是首發(fā)搭載了聯(lián)發(fā)科天璣9200+旗艦
Top 主站蜘蛛池模板: 潮州市| 永宁县| 大关县| 洪湖市| 临西县| 藁城市| 桑日县| 金塔县| 离岛区| 赤水市| 竹溪县| 织金县| 敦化市| 子洲县| 东平县| 同仁县| 缙云县| 拉萨市| 友谊县| 上栗县| 镇坪县| 盈江县| 比如县| 资阳市| 阿瓦提县| 兴城市| 青州市| 纳雍县| 舟山市| 错那县| 长垣县| 绩溪县| 襄汾县| 哈密市| 志丹县| 岳阳县| 大名县| 天柱县| 黄大仙区| 胶南市| 姚安县|