Java最新發布版本有哪些變化?

小魏技術發表於2023-09-18

 

JDK21在今年9月份(也就是2023年9月)就要正式釋出了。和之前版本有哪些不同?

 

JDK 21這個版本將是Java SE平臺版本21的參考實現,由Java社群程式中的JSR 396指定。目前JDK 21處於第二階段的降級階段,整個特性集已經凍結,並且沒有進一步的JEP將會針對該版本進行開發。根據JDK釋出流程(JEP 3),穩定版本庫jdk21在獲得批准後可以選擇進行bug修復,但後期增強功能需要滿足較高門檻。透過從主線版本庫回移植大多數穩定版本更改來處理候選錯誤修復請求和後期增強請求。早期訪問二進位制檔案可在GPL下獲取。

 

日程安排如下: 2023/06/08 第一階段(從主線分叉)、2023年7月20日第二階段、2023/08/10 初次釋出候選版、2023/08/24 最終釋出候選版、2023/09/19 正式可用。

當前 Java 中的多執行緒併發程式設計絕對是 令程式設計者 都非常頭疼的一部分,感覺就是學起來難啃,用起來難用。 JDK21 中就在這方面做了很大的改進,讓Java併發程式設計變得更簡單一點,更絲滑一點。

那具體是什麼呢?讓我們來具體來看一下。下面是 JDK21的 Feature。

 

特性

430:字串模板(預覽)

431:序列集合

439:分代ZGC

440:記錄模式

441:開關的模式匹配

442:外部函式和記憶體API(第三次預覽)

443:未命名模式和變數(預覽版)

444:虛擬執行緒

未命名類和例項主方法 (預覽)

446:作用域值(預覽)

448: vector API(第六個孵化器)

449:移除Windows 32位x86埠

451:準備禁止動態載入代理

452:金鑰封裝機制API

453:結構化併發(預覽)

其中 Virtual Threads Scoped Values Structured Concurrency 就是針對多執行緒併發程式設計的幾個功能。我們今天也主要來說一下他們。

虛擬執行緒( Virtual Threads)

虛擬執行緒是基於協程的執行緒,它們與其他語言中的協程具有相似之處,但也存在一些不同之處。

虛擬執行緒是依附於主執行緒的,如果主執行緒銷燬了,那虛擬執行緒也不復存在。

相同之處:

1.  虛擬執行緒和協程都是輕量級的執行緒,它們的建立和銷燬的開銷都比傳統的作業系統執行緒要小。

2.  虛擬執行緒和協程都可以透過暫停和恢復來實現執行緒之間的切換,從而避免了執行緒上下文切換的開銷。

3.  虛擬執行緒和協程都可以使用非同步和非阻塞的方式來處理任務,提高應用程式的效能和響應速度。

不同之處:

1.  虛擬執行緒是在 JVM 層面實現的,而協程則是在語言層面實現的。因此,虛擬執行緒的實現可以與任何支援 JVM 的語言一起使用,而協程的實現則需要特定的程式語言支援。

2.  虛擬執行緒是一種基於執行緒的協程實現,因此它們可以使用執行緒相關的 API,如 ThreadLocal Lock   Semaphore 。而協程則不依賴於執行緒,通常需要使用特定的非同步程式設計框架和 API。

3.  虛擬執行緒的排程是由 JVM 管理的,而協程的排程是由程式語言或非同步程式設計框架管理的。因此,虛擬執行緒可以更好地與其他執行緒進行協作,而協程則更適合處理非同步任務。

總的來說,虛擬執行緒是一種新的執行緒型別,它可以提高應用程式的效能和資源利用率,同時也可以使用傳統執行緒相關的 API。虛擬執行緒與協程有很多相似之處,但也存在一些不同之處。

虛擬執行緒確實可以讓多執行緒程式設計變得更簡單和更高效。相比於傳統的作業系統執行緒,虛擬執行緒的建立和銷燬的開銷更小,執行緒上下文切換的開銷也更小,因此可以大大減少多執行緒程式設計中的資源消耗和效能瓶頸。

使用虛擬執行緒,開發者可以像編寫傳統的執行緒程式碼一樣編寫程式碼,而無需擔心執行緒的數量和排程,因為 JVM 會自動管理虛擬執行緒的數量和排程。此外,虛擬執行緒還支援傳統執行緒相關的 API,如 ThreadLocal Lock   Semaphore ,這使得開發者可以更輕鬆地遷移傳統執行緒程式碼到虛擬執行緒。

虛擬執行緒的引入,使得多執行緒程式設計變得更加高效、簡單和安全,使得開發者能夠更加專注於業務邏輯,而不必過多地關注底層的執行緒管理。

結構化併發( Structured Concurrency)

結構化併發是一種程式設計正規化,旨在透過提供結構化和易於遵循的方法來簡化併發程式設計。使用結構化併發,開發人員可以建立更容易理解和除錯的併發程式碼,並且不容易出現競爭條件和其他與併發有關的錯誤。在結構化併發中,所有併發程式碼都被結構化為稱為任務的定義良好的工作單元。任務以結構化方式建立、執行和完成,任務的執行總是保證在其父任務完成之前完成。

Structured Concurrency(結構化併發)可以讓多執行緒程式設計更加簡單和可靠。在傳統的多執行緒程式設計中,執行緒的啟動、執行和結束是由開發者手動管理的,因此容易出現執行緒洩露、死鎖和異常處理不當等問題。

使用結構化併發,開發者可以更加自然地組織併發任務,使得任務之間的依賴關係更加清晰,程式碼邏輯更加簡潔。結構化併發還提供了一些異常處理機制,可以更好地管理併發任務中的異常,避免因為異常而導致程式崩潰或資料不一致的情況。

除此之外,結構化併發還可以透過限制併發任務的數量和優先順序,防止資源競爭和飢餓等問題的發生。這些特性使得開發者能夠更加方便地實現高效、可靠的併發程式,而無需過多關注底層的執行緒管理。

作用域值( Scoped Values)

作用域值是 JDK 20中的一項功能,允許開發人員建立作用域限定的值,這些值限定於特定的執行緒或任務。作用域值類似於執行緒本地變數,但是設計為與虛擬執行緒和結構化併發配合使用。它們允許開發人員以結構化的方式在任務和虛擬執行緒之間傳遞值,無需複雜的同步或鎖定機制。作用域值可用於在應用程式的不同部分之間傳遞上下文資訊,例如使用者身份驗證或請求特定資料。

 

作為一個長期支援版本, JDK 21將獲得5年的主要支援和擴充套件支援,直到2031年9月。當前的LTS版本是JDK 17,於2021年9月釋出。非lts版本,如JDK 20和JDK 19,只獲得六個月的主要支援,沒有擴充套件支援。LTS每兩年釋出一次。

 

更多資訊可加技術群(QQ721096495)討論交流。


點選連結加入群聊【信創技術交流群】: http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=EjDhISXNgJlMMemn85viUFgIqzkDY3OC&authKey=2SKLwlmvTpbqlaQtJ%2FtFXJgHVgltewcfvbIpzdA7BMjIjt2YM1h71qlJoIuWxp7K&noverify=0&group_code=721096495


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70033718/viewspace-2984088/,如需轉載,請註明出處,否則將追究法律責任。

相關文章