文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

【Java基础-JDK21新特性】它发任它发,我用java8

2023-09-29 17:46

关注

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
img

  • 推荐:kuan 的首页,持续学习,不断总结,共同进步,活到老学到老
  • 导航
    • 檀越剑指大厂系列:全面总结 java 核心技术点,如集合,jvm,并发编程 redis,kafka,Spring,微服务,Netty 等
    • 常用开发工具系列:罗列常用的开发工具,如 IDEA,Mac,Alfred,electerm,Git,typora,apifox 等
    • 数据库系列:详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等
    • 懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
    • 数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂

非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

博客目录

1.介绍

JDK 21 已经于 2023 年 9 月 19 日正式发布。本文总结了 JDK 21 发布的新特性。

根据发布的规划,这次发布的 JDK 21 将是一个长期支持版(LTS 版)。LTS 版每 2 年发布一个,上一次长期支持版是 21 年 9 月发布的 JDK 17。不能抱有你强任你强,我用 java8 的思想。

2.版本

主要分为 OpenJDK 版本和 Oracle 版本,下载地址如下:

3.JDK21 新特性

4.安装 jdk21

image-20230926013250793

image-20230926013311968

5.虚拟线程

将虚拟线程(Virtual Threads)引入 Java 平台。虚拟线程是轻量级线程,可以显著减少编写、维护和观察高吞吐量并发应用程序的工作量。

  1. 轻量级线程管理:虚拟线程不需要底层操作系统线程的支持,因此可以创建数千甚至数万个虚拟线程而不会消耗大量的内存和资源。这使得应用程序可以更高效地管理大量并发任务。
  2. 更快的线程创建和销毁:传统的 Java 线程创建和销毁通常涉及昂贵的操作系统调用,而虚拟线程的创建和销毁成本更低,因此可以更快速地启动和停止线程。
  3. 更好的资源利用:由于虚拟线程可以更轻松地伸缩,因此它们有助于更好地利用现有的系统资源,以处理大规模的并发请求。
  4. 避免死锁和资源争夺:虚拟线程的管理方式可以减少线程之间的竞争和资源争夺,从而降低了死锁和性能问题的风险。
  5. 简化并发编程:虚拟线程的引入使得编写并发程序变得更加容易,开发人员可以专注于业务逻辑而不必过多关注线程管理和同步。
public class Test01 {    public static void main(String[] args) {        try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {            IntStream.range(0, 10000).forEach(i -> executor.submit(() -> {                Thread.sleep(Duration.ofSeconds(1));                return i;            }));        }    }}

6.有序集合

在 JDK 21 中,Sequenced Collections 的引入带来了新的接口和方法来简化集合处理。此增强功能旨在解决访问 Java 中各种集合类型的第一个和最后一个元素需要非统一且麻烦处理场景。

Sequenced Collections 引入了三个新接口:

image-20230926020839133

绿色方框是新增的 3 个接口,从中可以看到已有集合类的继承关系的变化:

有了这 3 个新的顺序集合相关的接口之后,Java 代码可以更清楚地表达顺序集合以及顺序集合上的操作。

这些接口附带了一些新方法,以提供改进的集合访问和操作功能。

public class Test02 {    public static void main(String[] args) {        SequencedCollection<Integer> arr = new ArrayList<>();        arr.addLast(1);        arr.addLast(2);        arr.addLast(3);        arr.addLast(31);        arr.addFirst(14);        System.out.println(arr);    }}

第一个和最后一个元素的访问:

在 JDK 21 之前,检索 Java 中集合的第一个和最后一个元素涉及不同的方法和途径,具体取决于集合类型。

下面让我们看一下使用 JDK 21 之前的 JDK API 调用访问第一个和最后一个元素的一些示例:

访问位置ListDequeSortedSet
第一个元素list.get(0)deque.getFirst()set.first()
最后一个元素list.get(list.size()-1)deque.getLast()set.last()

可以看到,一个简单的操作,在不同的集合中需要不同的编写方式,非常麻烦!

但在 JDK 21 之后,访问第一个和最后一个元素就方法多了:

对于List, Deque, Set这些有序的集合,访问方法变得统一起来:

首先是 SequencedCollection,该接口的声明如下所示:SequencedCollection 继承自 Collection

interface SequencedCollection<E> extends Collection<E> {    SequencedCollection<E> reversed();    void addFirst(E);    void addLast(E);    E getFirst();    E getLast();    E removeFirst();    E removeLast();}

在包含的方法中:

SequencedSet

interface SequencedSet extends Set, SequencedCollection {    SequencedSet reversed();}

SequencedMap

SequencedMap 继承自 Map,其中的 entry 有确定的出现顺序。

SequencedMap 中的方法比较多,如下所示:

interface SequencedMap<K,V> extends Map<K,V> {    SequencedMap<K,V> reversed();    SequencedSet<K> sequencedKeySet();    SequencedCollection<V> sequencedValues();    SequencedSet<Entry<K,V>> sequencedEntrySet();    V putFirst(K, V);    V putLast(K, V);    Entry<K, V> firstEntry();    Entry<K, V> lastEntry();    Entry<K, V> pollFirstEntry();    Entry<K, V> pollLastEntry();}

具体的方法说明:

7.记录模式

使用记录模式(Record Patterns)增强 Java 编程语言,以解构记录值。可以嵌套记录模式和类型模式,以实现功能强大、声明性和可组合形式的数据导航和处理。

public record Test03(int x, int y) {}

image-20230926021316252

static void print(Object o) {    if (o instanceof Test03(int x, int y)) {        System.out.println(x + y);    }}

8.switch 模式匹配

通过 switch 表达式和语句的模式匹配来增强 Java 编程语言。通过将模式匹配扩展到 switch,可以针对多个模式测试表达式,每个模式都有一个特定的操作,从而可以简洁、安全地表达复杂的面向数据的查询。

public class Test04 {    public static void main(String[] args) {        Object obj = "你好";        Object a = switch (obj) {            case Integer i -> String.format("int %d", i);            case String s -> String.format("string %s", s);            case Double d -> String.format("Double %s", d);            default -> obj.toString();        };        System.out.println(a);    }}

觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

img

来源地址:https://blog.csdn.net/qyj19920704/article/details/133297170

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯