Java 10
💛 var
[!quote] var var 定义的变量,无需指定具体的数据类型,而是用编译器自行推断
- 定义时必须初始化
- 只能用于局部变量
- 不能用于成员变量、方法参数、返回类型
- 每次只能定义一个变量,不能复合声明
java
var str = "Hello, World!"; // String
var num = 123; // int
var list = new ArrayList<String>(); // ArrayList<String>Java 15
隐藏类
Java 16
Java 17
switch 的模式匹配
java
switch (data.get("key1")) {
case String s -> log.info(s);
case Double d -> log.info(d.toString());
case Integer i -> log.info(i.toString());
default -> log.info("");
}Java 21
虚拟线程
虚拟线程出现之前,Java 中我们使用的是 java.lang.Thread,它背后是操作系统级别的线程,也就是平台线程。
✨️ 平台线程 :
- 和操作系统线程一一对应
- 资源开销大,每个线程默认会占用 2MB ~ 10MB 的内存栈空间,所以你不能轻松地创建几万个、几十万个线程,因为内存会耗尽
✨️ 虚拟线程 :
- 轻量级线程,由 JVM 调度,而不是操作系统
- 一个平台线程可以承载成千上万个虚拟线程,从而显著减少内存和调度开销
- 虚拟线程在运行时会临时绑定一个平台线程,但并不独占,会在需要时被挂起、恢复,这时平台线程就像公交车一样,虚拟线程就像乘客需要时上车,不需要时下车
- 仍是“一个请求一条线程”的模型。避免了由于任务分布在多个线程上,一个请求的调用栈不再是连续线性的,调试时堆栈信息缺乏上下文的问题