Skip to content

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 调度,而不是操作系统
  • 一个平台线程可以承载成千上万个虚拟线程,从而显著减少内存和调度开销
  • 虚拟线程在运行时会临时绑定一个平台线程,但并不独占,会在需要时被挂起、恢复,这时平台线程就像公交车一样,虚拟线程就像乘客需要时上车,不需要时下车
  • 仍是“一个请求一条线程”的模型。避免了由于任务分布在多个线程上,一个请求的调用栈不再是连续线性的,调试时堆栈信息缺乏上下文的问题