免费A级毛片无码专区网站-成人国产精品视频一区二区-啊 日出水了 用力乖乖在线-国产黑色丝袜在线观看下-天天操美女夜夜操美女-日韩网站在线观看中文字幕-AV高清hd片XXX国产-亚洲av中文字字幕乱码综合-搬开女人下面使劲插视频

Java 19 新功能介紹

點(diǎn)贊再看,動(dòng)力無(wú)限 。微信搜「程序猿阿朗」 。
本文 Github.com/niumoo/JavaNotes 和 未讀代碼博客 已經(jīng)收錄,有很多知識(shí)點(diǎn)和系列文章 。

Java 19 新功能介紹

文章插圖
Java 19 在2022 年 9 月 20 日正式發(fā)布,Java 19 不是一個(gè)長(zhǎng)期支持版本,直到 2023 年 3 月它將被 JDK 20 取代,這次更新共帶來(lái) 7 個(gè)新功能 。
?bin ./java -versionopenjdk version "19" 2022-09-20OpenJDK Runtime Environment (build 19+36-2238)OpenJDK 64-Bit Server VM (build 19+36-2238, mixed mode, sharing)OpenJDK Java 19 下載:https://jdk.java.net/19/
OpenJDK Java 19 文檔:https://openjdk.java.net/projects/jdk/19/
Java 19 帶來(lái)的 7 個(gè)新特性:
JEP描述405Record 模式匹配 (Preview)425虛擬線程 (預(yù)覽)427Switch 模式匹配 (三次預(yù)覽)422Linux/RISC-V Port426Vector API (四次孵化)424外部函數(shù) & 內(nèi)存 API (Preview)428Structured Concurrency (Incubator)
Java 19 新功能介紹是 Java 新特性系列文章中的一部分 。
系列詳情可以瀏覽:https://www.wdbyte.com/java-feature/
JEP 405: Record 模式匹配(預(yù)覽)record 是一種全新的類型,它本質(zhì)上是一個(gè) final 類,同時(shí)所有的屬性都是 final 修飾,它會(huì)自動(dòng)編譯出 public get hashcode 、equalstoString 等方法,減少了代碼編寫(xiě)量 。Record 在 Java 14 中被提出,在 Java 15 中二次預(yù)覽,在 Java 16 中正式發(fā)布 。
示例:編寫(xiě)一個(gè) Dog record 類,定義 name 和 age 屬性 。
package com.wdbyte;public record Dog(String name, Integer age) {}Record 的使用 。
package com.wdbyte;public class Java14Record {public static void main(String[] args) {Dog dog1 = new Dog("牧羊犬", 1);Dog dog2 = new Dog("田園犬", 2);Dog dog3 = new Dog("哈士奇", 3);System.out.println(dog1);System.out.println(dog2);System.out.println(dog3);}}輸出結(jié)果:
Dog[name=牧羊犬, age=1]Dog[name=田園犬, age=2]Dog[name=哈士奇, age=3]在 Java 19 中,為 Record 帶來(lái)了增強(qiáng)的模式匹配,在使用 instanceof 后,可以進(jìn)行類型轉(zhuǎn)換 。
public class RecordTest {public static void main(String[] args) {Object dog1 = new Dog("牧羊犬", 1);if(dog1 instanceof Dog dogTemp){System.out.println(dogTemp.name());}}}record Dog( String name, Integer age ){}// ?bin ./javaRecordTest.java// 牧羊犬甚至可以在使用 instanceof 時(shí)直接得到 Record 中的變量引用 。
public class RecordTest2 {public static void main(String[] args) {Object dog1 = new Dog("牧羊犬", 1);if(dog1 instanceof Dog(String name,Integer age)){System.out.println(name+":"+age);}}}record Dog( String name, Integer age ){}//?bin ./java --enable-preview --source 19 RecordTest2.java//注: RecordTest2.java 使用 Java SE 19 的預(yù)覽功能 。//注: 有關(guān)詳細(xì)信息,請(qǐng)使用 -Xlint:preview 重新編譯 。//牧羊犬:1
擴(kuò)展:
Java 14 instanceof 類型推斷
Java 16 Record 介紹
JEP 425: 虛擬線程 (預(yù)覽)很實(shí)用的一個(gè)新特性,從 Java 19 開(kāi)始逐步的引入虛擬線程,虛擬線程是輕量級(jí)的線程,可以在顯著的減少代碼的編寫(xiě),提高可維護(hù)性的同時(shí)提高系統(tǒng)的吞吐量 。
引入的原因一直以來(lái),在 Java 并發(fā)編程中,Thread 都是十分重要的一部分,Thread 是 Java 中的并發(fā)單元,每個(gè) Thread 線程都提供了一個(gè)堆棧來(lái)存儲(chǔ)局部變量和方法調(diào)用,以及線程上下文等相關(guān)信息 。
但問(wèn)題是線程和進(jìn)程一樣,都是一項(xiàng)昂貴的資源,JDK 將 Thread 線程實(shí)現(xiàn)為操作系統(tǒng)線程的包裝器,也就是說(shuō)成本很高,而且數(shù)量有限 。也因此我們會(huì)使用線程池來(lái)管理線程,同時(shí)限制線程的數(shù)量 。比如常用的 Tomcat 會(huì)為每次請(qǐng)求單獨(dú)使用一個(gè)線程進(jìn)行請(qǐng)求處理,同時(shí)限制處理請(qǐng)求的線程數(shù)量以防止線程過(guò)多而崩潰;這很有可能在 CPU 或網(wǎng)絡(luò)連接沒(méi)有耗盡之前,線程數(shù)量已經(jīng)耗盡,從而限制了 web 服務(wù)的吞吐量 。

經(jīng)驗(yàn)總結(jié)擴(kuò)展閱讀