JDK21新特性

官网地址

https://openjdk.org/projects/jdk/21/

思维导图

在这里插入图片描述

虚拟线程

在这里插入图片描述

一、新特性功能介绍

  1. 字符串模版
    新的字符串插值语法允许在字符串中嵌入表达式,使用${expression}的形式。这样可以更方便地将变量或表达式的值嵌入到字符串中,而无需使用字符串连接操作符。例如:
String name = "John";
int age = 25;
String message = STR."My name is \{name} and I am \{age} years old.";
System.out.println(message);
2)多行模板表达式

String title = "My Web Page";
String text  = "Hello, world";
String html = STR."""         
<html>           
	<head>             
		<title>\{title}</title>           
	</head>           
	<body>             
		<p>\{text}</p>           
	</body>         
</html>         

3)字符串模板中使用嵌入的表达式进行计算和自增操作

int index = 0;
String data = STR."\{index++}, \{index++}, \{index++}, \{index++}";
4)字符串模板中使用嵌入的表达式来访问数组元素

String[] fruit = { "apples", "oranges", "peaches" };
String s = STR."\{fruit[0]}, \{STR."\{fruit[1]}, \{fruit[2]}"}";

二、顺序集合

针对于元素在集合中有具体的位置的顺序集合例如 :ArrayList、LinkedHashSet、LinkedHashMap 等 。

JDK 21 新增了三个接口:SequencedCollection、SequencedSet SequencedMap 提供了快速获取、添加、删除头尾元素以及反转集合中元素的操作。

SequencedCollection
SequencedSet
SequencedMap

三、虚拟线程

1 背景

JDK21 在 9 月 19 号正式发布,带来了较多亮点,其中虚拟线程备受瞩目,毫不夸张的说,它改变了高吞吐代码的编写方式,只需要小小的变动就可以让目前的 IO 密集型程序的吞吐量得到提升,写出高吞吐量的代码不再困难。

2 线程术语定义

操作系统线程(OS Thread):由操作系统管理,是操作系统调度的基本单位。
平台线程(Platform Thread):Java.Lang.Thread 类的每个实例,都是一个平台线程,是 Java 对操作系统线程的包装,与操作系统是 1:1 映射。
虚拟线程(Virtual Thread):一种轻量级,由 JVM 管理的线程。对应的实例 java.lang.VirtualThread 这个类。
载体线程(Carrier Thread):指真正负责执行虚拟线程中任务的平台线程。一个虚拟线程装载到一个平台线程之后,那么这个平台线程就被称为虚拟线程的载体线程。

虚拟线程定义:
JDK 中 java.lang.Thread 的每个实例都是一个平台线程。平台线程在底层操作系统线程上运行 Java 代码,并在代码的整个生命周期内独占操作系统线程,平台线程实例本质是由系统内核的线程调度程序进行调度,并且平台线程的数量受限于操作系统线程的数量。

而虚拟线程它不与特定的操作系统线程相绑定。它在平台线程上运行 Java 代码,但在代码的整个生命周期内不独占平台线程。这意味着许多虚拟线程可以在同一个平台线程上运行他们的 Java 代码,共享同一个平台线程。同时虚拟线程的成本很低,虚拟线程的数量可以比平台线程的数量大得多。
在这里插入图片描述

3 虚拟线程创建

方法一:直接创建虚拟线程

Thread vt = Thread.startVirtualThread(() -> {  
  System.out.println("hello wolrd virtual thread");
});

方法二:创建虚拟线程但不自动运行,手动调用start()开始运行

Thread.ofVirtual().unstarted(() -> {    
	System.out.println("hello wolrd virtual thread");
});
vt.start();

方法三:通过虚拟线程的 ThreadFactory 创建虚拟线程

ThreadFactory tf = Thread.ofVirtual().factory();
Thread vt = tf.newThread(() -> {    
	System.out.println("Start virtual thread...");   
	Thread.sleep(1000);    
	System.out.println("End virtual thread. ");
});
vt.start();

方法四:Executors.newVirtualThreadPer-TaskExecutor()

ExecutorService executor = Executors.newVirtualThreadPerTaskExecutor();
executor.submit(() -> {    
	System.out.println("Start virtual thread...");   
	Thread.sleep(1000);   
	System.out.println("End virtual thread."); 
	return true;
});

4 虚拟线程实现原理

  • 轻量级与用户态实现
  • 协作式调度器
  • 连续传递样式
  • 栈切换与内存管理
  • 与操作系统线程的映射
  • 任务管理和排队
  • 30
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很抱歉,目前JDK的最新版本是JDK 17,而不是JDK 21。以下是JDK 8到JDK 17的一些新特性介绍: JDK 8新特性: 1. Lambda表达式:引入了函数式编程的概念,简化了代码编写。 2. Stream API:提供了一种更便捷的方式来处理集合数据。 3. 接口的默认方法:允许在接口中定义默认的方法实现。 4. 方法引用:可以通过方法的名字来引用方法,简化了代码编写。 5. 新的日期和时间API:提供了更好的日期和时间处理方式。 JDK 9新特性: 1. 模块化系统:引入了Java平台模块系统(JPMS),提供了更好的代码组织和隔离性。 2. JShell:交互式编程工具,可以在命令行中进行Java代码的实时执行和测试。 3. 私有接口方法:允许在接口中定义私有方法。 4. 改进的Stream API:引入了一些新的操作方法,提供了更好的性能和灵活性。 JDK 10新特性: 1. 局部变量类型推断:可以使用var关键字来声明局部变量,编译器会自动推断变量类型。 2. 应用类数据共享(Application Class-Data Sharing):可以在多个Java进程之间共享类数据,提高启动时间和内存利用率。 3. 并行全垃圾回收器(Parallel Full GC):提供了一种新的垃圾回收器,可以在全局垃圾回收时并行处理。 JDK 11新特性: 1. HTTP客户端API:引入了一套新的标准HTTP客户端API,替代了老旧的HttpURLConnection。 2. 嵌套访问控制:允许在类的内部定义嵌套的私有接口和私有类,并对外部类进行访问控制。 3. Epsilon垃圾回收器:一种实验性的垃圾回收器,用于性能测试和短期任务。 JDK 12到JDK 17的新特性包括了更多的改进和优化,如增强的Switch语句、新的垃圾回收器、增强的Pattern匹配等。如果你对其中的某个版本特性有具体的问题,我可以为你提供更详细的解答。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值