点赞再看,动力无限 。微信搜「程序猿阿朗」 。
本文 Github.com/niumoo/JavaNotes 和 未读代码博客 已经收录,有很多知识点和系列文章 。
文章插图
Java 19 在2022 年 9 月 20 日正式发布 , Java 19 不是一个长期支持版本,直到 2023 年 3 月它将被 JDK 20 取代,这次更新共带来 7 个新功能 。
?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 带来的 7 个新特性:
JEP描述405Record 模式匹配 (Preview)425虚拟线程 (预览)427Switch 模式匹配 (三次预览)422Linux/RISC-V Port426Vector API (四次孵化)424外部函数 & 内存 API (Preview)428Structured Concurrency (Incubator)
Java 19 新功能介绍是 Java 新特性系列文章中的一部分 。JEP 405: Record 模式匹配(预览)【Java 19 新功能介绍】
系列详情可以浏览:https://www.wdbyte.com/java-feature/
record
是一种全新的类型,它本质上是一个 final
类,同时所有的属性都是 final
修饰,它会自动编译出 public get
hashcode
、equals
、toString
等方法,减少了代码编写量 。Record 在 Java 14 中被提出,在 Java 15 中二次预览,在 Java 16 中正式发布 。示例:编写一个 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);}}
输出结果:Dog[name=牧羊犬, age=1]Dog[name=田园犬, age=2]Dog[name=哈士奇, age=3]
在 Java 19 中,为 Record 带来了增强的模式匹配,在使用 instanceof
后,可以进行类型转换 。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
时直接得到 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 的预览功能 。//注: 有关详细信息,请使用 -Xlint:preview 重新编译 。//牧羊犬:1
扩展:JEP 425: 虚拟线程 (预览)很实用的一个新特性,从 Java 19 开始逐步的引入虚拟线程,虚拟线程是轻量级的线程,可以在显著的减少代码的编写,提高可维护性的同时提高系统的吞吐量 。
Java 14 instanceof 类型推断
Java 16 Record 介绍
引入的原因一直以来 , 在 Java 并发编程中 , Thread 都是十分重要的一部分,Thread 是 Java 中的并发单元,每个 Thread 线程都提供了一个堆栈来存储局部变量和方法调用,以及线程上下文等相关信息 。
但问题是线程和进程一样,都是一项昂贵的资源 , JDK 将 Thread 线程实现为操作系统线程的包装器,也就是说成本很高,而且数量有限 。也因此我们会使用线程池来管理线程,同时限制线程的数量 。比如常用的 Tomcat 会为每次请求单独使用一个线程进行请求处理 , 同时限制处理请求的线程数量以防止线程过多而崩溃;这很有可能在 CPU 或网络连接没有耗尽之前,线程数量已经耗尽,从而限制了 web 服务的吞吐量 。
看到这里你可能要说了,可以放弃请求和线程一一对应的方式啊 , 使用异步编程来解决这个问题,把请求处理分段,在组合成顺序管道,通过一套 API 进行管理 , 这样就可以使用有限的线程来处理超过线程数量的请求 。这当然也是可以的,但是随之而来的问题是:
- 需要额外的学习异步编程 。
- 代码复杂度增加,等于放弃了语言的基本顺序组合运算 。
- 堆栈上下文信息都变得难以追踪 。
推荐阅读
- Java线程未捕获异常处理 UncaughtExceptionHandler
- 拯救者Y9000K2021探索版配置升级_拯救者Y9000K2021探索版升级配置介绍
- 死磕面试系列,Java到底是值传递还是引用传递?
- 【Java复健指南09】项目练习全解--房屋出租系统
- Java集合精选常见面试题
- Java单例模式,看这一篇就够了
- ios15最新消息_airpods新功能怎么用
- 微信支付v3接口的 官方 Java SDK
- 华为p50pro有什么颜色〖科技未来〗-华为p50pro配色介绍
- vivox60手机参数配置_vivox60手机参数配置介绍