switch 的模式匹配
Java21中的switch 表达式和语句,允许在 case 标签中使用模式。当模式匹配时,执行 case 标签对应的代码。可以针对多个模式测试表达式,每个模式都有一个特定的操作,从而可以简洁、安全地表达复杂的面向数据的查询。
public class SwitchTest {
public static void main(String[] args) {
String r1 = formatterPatternSwitch(Integer.valueOf(1));
String r2 = formatterPatternSwitch(new String("www.lalkk.com"));
String r3 = formatterPatternSwitch(Double.valueOf(3.14D));
System.out.println(r1);
System.out.println(r2);
System.out.println(r3);
}
static String formatterPatternSwitch(Object obj) {
return switch (obj) {
case Integer i -> String.format("int %d", i);
case Long l -> String.format("long %d", l);
case Double d -> String.format("double %f", d);
case String s -> String.format("String %s", s);
default -> obj.toString();
};
}
}
虚拟线程
虚拟线程 (Virtual Threads) 是 Java 21 的一个重大更新,虚拟线程是由JDK实现的轻量级线程,多个虚拟线程可以共享同一个操作系统线程,虚拟线程的数量可以远大于操作系统线程的数量。
为什么要用虚拟线程呢?因为Java程序在基于系统线程的并发模型中,创建线程和销毁线程,在线程之间切换的开销很大,限制的Java程序处理大规模并发时的性能和扩展性。还有操作系统的线程是有有限的,程序在大量创建线程时线程资源可能会耗尽,导致性能问题。Java21正式使用虚拟线程,可以提供更高的性能,使用更低的资源,且有更好的伸缩性。虚拟线程属于非常轻量级的资源,在使用时创建,用完就扔,不需要池化虚拟线程。
创建虚拟线程并运行的简单实例
Thread vt = Thread.startVirtualThread(() -> {
System.out.println("Start virtual thread...");
Thread.sleep(10);
System.out.println("End virtual thread.");
});
注意:使用虚拟线程创建大量线程仍然会导致线程资源耗尽。