JDK 21新特性有哪些

JDK 21

JDK 21是继JDK 17之后最新的长期支持 (LTS) 版本,目前有JDK8、JDK11、JDK17和JDK21四个长期支持版。JDK 21官网下载地址:https://www.oracle.com/cn/java/technologies/downloads/#jdk21-windows

虚拟线程

虚拟线程(Virtual Threads)是Java中的一种新型线程模型,是JDK21中最为重要的特性。JDK19开始引入虚拟线程,JDK21升级为正式特性。虚拟线程是轻量级的线程,它提供了更高效和可扩展的并发编程方式,提高系统的吞吐量。

传统线程模型直接映射到操作系统级别的线程。每个线程都有自己的内核上下文,包括寄存器、堆栈等资源。创建和切换这些物理线程是有很大开销的,尤其是在高并发场景下。虚拟线程是在Java虚拟机(JVM)内部管理的,不直接对应于操作系统的线程。虚拟线程由JVM调度,并在一个或多个物理线程上执行。由于虚拟线程的生命周期和状态都在JVM层面进行管理,所以创建和销毁虚拟线程的成本非常低。此外,虚拟线程之间的上下文切换也比传统的操作系统级别线程要快得多。

使用虚拟线程

要在Java中使用虚拟线程,只需将Thread类替换为VirtualThread类即可。例如:

Thread.ofVirtual().start(new Runnable() { //立即启动虚拟线程
	public void run() {
		System.out.println("Hello Virtual Thread 1");
	}
});

//设置名称,不立即启动
Thread thread1 = Thread.ofVirtual().name("v-thread").unstarted(() -> {
	String threadName = Thread.currentThread().getName();
	System.out.println(String.format("[%s] Hello Virtual Thread 2", threadName));
});
thread1.start(); //启动虚拟线程

顺序集合

在Java 21中,引入了一种新的集合类型——顺序集合(Sequenced Collections),它是一种具有确定出现顺序的集合,它通过提供可预测的迭代顺序来解决多线程环境下的竞争条件和不确定性问题。
顺序集合的主要特点在于其元素的出现顺序是固定的,无论是遍历还是添加/删除元素,元素的位置都不会改变。在Java 21中,顺序集合通过引入三个新的接口来实现,分别是SequencedCollection、ReversedSequencedCollection和ReversedSequencedCollection。

List<Integer> listTemp = List.of(1, 2, 3, 4, 5);

ArrayList<Integer> list = new ArrayList<Integer>(listTemp);
Deque<Integer> deque = new ArrayDeque<>(listTemp);
LinkedHashSet<Integer> linkedHashSet = new LinkedHashSet<>(listTemp);
TreeSet<Integer> sortedSet = new TreeSet<>(listTemp);
LinkedHashMap<Integer, Integer> linkedHashMap = new LinkedHashMap<>();
for (int i = 1; i <= 5; i++) {
linkedHashMap.put(i, i);
}

// 输出第一个元素
System.out.println(list.getFirst());
System.out.println(deque.getFirst());
System.out.println(linkedHashSet.getFirst());
System.out.println(sortedSet.getFirst());
System.out.println(linkedHashMap.firstEntry());

字符串模板

字符串模板(String Templates)是一种预览功能,引入了字符串模版 STR、RAW 类,在处理字符串时,可以通过 {x} 来读取名称为 x 的变量值。旨在简化处理复杂字符串的过程。它可以让我们在字符串中直接嵌入表达式,而无需进行额外的处理。

public static String testSTR(int a, int b) {
	return STR."\{ a } x \{ b } = \{ a * b }" ;
}

并发性能提升

JDK 21对并发性能进行了显著提升,引入了新的并发库和工具,以帮助构建高性能的多线程应用程序。

其他新特性

JDK 21还包含了许多其它改进和增强,Record 模式、switch 模式匹配、未命名的类和 main 方法、分代 ZGC等。

Android后台发心跳请求 定时器间隔不准问题 VPN异地组网——解决虚拟网卡无法启动的问题
微信公众号