Java 19 在数分钟前正式发布,这是一个非 LTS(长期支持)版本。该版本的七项功能包括结构化并发、记录模式、外部函数和内存 API 的预览,以及对开源 Linux/RISC-V 指令集架构 (ISA) 的支持。

新特性

  • JEP 405 Record Patterns (预览)

  • JEP 422 Linux/RISC-V Port

  • JEP 424 Foreign Function & Memory API (预览)

  • JEP 425 Virtual Threads (预览)

  • JEP 426 Vector API (第四次孵化)

  • JEP 427 Pattern Matching for switch (第三次预览)

  • JEP 428 Structured Concurrency (孵化)

JEP 405 Record Patterns

这是对Java 17正式生效的Record Class的增强。JEP 405让记录模式和类型模式可以嵌套,以实现强大的、可声明的、可组合的数据处理形式。

在JDK 16 中,我们已经可以实现下列特性:

// jdk 16 以前
if (o instanceof String) {// 及时类型匹配 依然需要转换String s = (String)o;
}// jdk 16 以后
if (o instanceof String s) {// 直接使用 s
}

但是上面的特性应用在Record Class中并不是很丝滑,依然需要通过属性方法来获取属性值:

public record Position(int x, int y) {}// record 结合类型匹配 依然需要通过方法获取属性
private void print(Object object) {if (object instanceof Position position) {int x =  position.x();int y =  position.y();}
}

JEP 405中我们可以这样:

private void print(Object object) {if (object instanceof Position(int x, int y)) {// 直接使用 x 和 y}
}

当然这仅仅是 JEP 405 的一小部分,该特性也可以应用到switch语句,甚至是嵌套条件中。

JEP 422 Linux/RISC-V Port

由于 RISC-V 指令集架构的硬件越来越多,从Java 19开始提供相应架构的端口。

RISC-V是一个免费和开源的 RISC 指令集架构 (ISA),最初由加州大学伯克利分校设计,现在在RISC-V International的赞助下合作开发。它已经被广泛的语言工具链支持。随着 RISC-V 硬件的日益普及,JDK 的移植将是有价值的。

JEP 424 Foreign Function & Memory API

通过该特性,Java 程序可以通过 API 与 Java 运行时之外的代码和数据进行互操作。通过有效地调用外部函数(即JVM之外的代码)和安全地访问外部内存(即不受 JVM 管理的内存),API 使 Java 程序能够调用 native 库并处理 native 数据,比使用JNI更加安全。这个JEP并不是第一次预览,从JDK 14开始陆续相关的特性都经过孵化和预览,本次是对以往的相关预览特性的改进。

JEP 425 Virtual Threads

虚拟线程,关于虚拟线程之前胖哥有文章进行来专门讲解科普,有兴趣可以通过这篇文章进行了解。

传统线程和虚拟线程

在本次 Java 19 中虚拟线程正式以预览的状态亮相,这能够简化对多线程的操作,让以往“昂贵”的线程更加“廉价”。

JEP 426 Vector API

引入一个 API 来表达向量计算,该计算可以在运行时可靠地编译为支持的 CPU 架构上的最佳向量指令,从而实现优于等效标量计算的性能。这个特性已经算老面孔了,已经是第四次预览了。

JEP 427 Pattern Matching for switch

switch语句的匹配模式,目前还没有转正,这是它第三次预览。胖哥已经多次介绍该特性,可以去胖哥往期JDK发布的文章看看。

JEP 428 Structured Concurrency

结构化并发,听起来很厉害的样子。通过引入用于结构化并发的 API 来简化多线程编程。结构化并发将在不同线程中运行的多个任务视为单个工作单元,从而简化错误处理和取消,提高可靠性并增强可观察性。这是一个孵化 API 。

结构化并发 API 的主体类是StructuredTaskScope。此类允许开发人员将任务构建为一系列并发子任务,并将它们作为一个单元进行协调。子任务在它们自己的线程中执行,方法是将它们单独分叉(fork),然后将它们作为一个单元加入,并可能将它们作为一个单元取消( cancel )。子任务的成功结果或异常由父任务聚合和处理。StructuredTaskScope将子任务或分叉的生命周期限制在明确的词法范围内,这样我们可以像写单线程代码一样来写多线程代码。官方给来一个例子:

Response handle() throws ExecutionException, InterruptedException {try (var scope = new StructuredTaskScope.ShutdownOnFailure()) {Future<String>  user  = scope.fork(() -> findUser());Future<Integer> order = scope.fork(() -> fetchOrder());scope.join();           // Join both forksscope.throwIfFailed();  // ... and propagate errors// Here, both forks have succeeded, so compose their resultsreturn new Response(user.resultNow(), order.resultNow());}
}

Java 的多线程对开发者历来都是“魔鬼”,这个特性有望改善这一状况。

Java 19 正式发布,改善多线程、并发编程难度相关推荐

  1. 网易云课堂微专业--Java高级开发工程师--多线程并发编程--学习笔记(二)

    文章目录 第一章 多线程并发编程 第二节 线程安全问题 1.2.1 线程安全之可见性问题 多线程中的问题 从内存结构到内存模型 工作内存缓存 指令重排序 内存模型的含义 Shared Variable ...

  2. java线程钥匙_Java多线程并发编程/锁的理解

    一.前言 最近项目遇到多线程并发的情景(并发抢单&恢复库存并行),代码在正常情况下运行没有什么问题,在高并发压测下会出现:库存超发/总库存与sku库存对不上等各种问题. 在运用了 限流/加锁等 ...

  3. Java 多线程 并发编程

    转载自  Java 多线程 并发编程 一.多线程 1.操作系统有两个容易混淆的概念,进程和线程. 进程:一个计算机程序的运行实例,包含了需要执行的指令:有自己的独立地址空间,包含程序内容和数据:不同进 ...

  4. Java多线程并发编程

    一.线程池 1.1.什么是线程池 线程池是一种多线程的处理方式,利用已有线程对象继续服务新的任务(按照一定的执行策略),而不是频繁地创建销毁线程对象,由此提高服务的吞吐能力,减少CPU的闲置时间.具体 ...

  5. Java多线程并发编程--Java并发包(JUC)

    Java多线程并发–Java并发包(JUC) 前言 前一篇文章中,笔者已经介绍了Java多线程的一些基础知识,但是想要成为一名中高级Java程序员还必须懂得Java并发包(JUC)的知识点,而且JUC ...

  6. python 多线程并发编程(生产者、消费者模式),边读图像,边处理图像,处理完后保存图像实现提高处理效率

    文章目录 需求 实现 先导入本次需要用到的包 一些辅助函数 如下函数是得到指定后缀的文件 如下的函数一个是读图像,一个是把RGB转成BGR 下面是主要的几个处理函数 在上面几个函数构建对应的处理函数 ...

  7. 【收藏】Java多线程/并发编程大合集

    (一).[Java并发编程]并发编程大合集-兰亭风雨    [Java并发编程]实现多线程的两种方法    [Java并发编程]线程的中断    [Java并发编程]正确挂起.恢复.终止线程    [ ...

  8. 它来了,阿里架构师的“Java多线程+并发编程”知识点详解手册,限时分享

    自学Java的时候,多线程和并发这一块可以说是最难掌握的部分了,很多小伙伴表示需要一些易于学习和上手的资料. 所以今天这份「Java并发学习手册」就是一份集中学习多线程和并发的手册,PDF版,由Red ...

  9. java多线程编程_阿里P8熬到秃头肝出来的:Java多线程+并发编程核心笔记

    自学Java的时候,多线程和并发这一块可以说是最难掌握的部分了,很多小伙伴表示需要一些易于学习和上手的资料. 所以今天这本「Java并发学习手册.pdf」就是一份集中学习多线程和并发的手册,PDF版, ...

最新文章

  1. 1. 训练集、开发集、测试集(Train/Dev/Test sets)
  2. hello this Word ! I'm coming!
  3. 如何防御潜在的破坏性DDoS攻击—Vecloud微云
  4. %@ taglib prefix=c uri=http://java.sun.com/jsp/jstl/core %会报错
  5. Windows、Linux 纷纷被爆漏洞,黑客可直取 root 权限!
  6. svr预测出来是一条直线_如何预测股价目标位,涨跌目标预测法之“解消点”帮你寻找...
  7. python filter_Python filter()
  8. TypeScript算法专题 - [双链表1] - 双链的概念及其实现
  9. 配置Pylint for Python3.5
  10. 计算机应用基础课件教学大赛,全国“XX杯”说课大赛计算机应用基础类优秀作品:设置IP地址教学课件.ppt...
  11. 花了3个月,濒临崩溃的K8S集群有救了……
  12. java-php-python-ssm幼儿园管理系统计算机毕业设计
  13. 161212 笔记--无线传感网络中的MAC协议
  14. 结构体的定义以及使用
  15. 软电话对接鼎信DWG无线网关
  16. 记录通过的阿里云认证
  17. 沈阳python需求大吗_我为什么放弃了敲代码,做产品?
  18. js 数组(定义数组,数组长度,数组计算,元素类型转换)
  19. 经济基础知识(初级)【6】
  20. 10亿数据中取最大的100个数据

热门文章

  1. 基于javaweb的足球俱乐部管理系统
  2. waterdrop介绍
  3. 基于waterdrop,从hive抽取数据至Oracle
  4. “三鹿乳业”会不会上市?
  5. JS 基本函数 数学函数
  6. 音频质量客观评价指标
  7. 【Labview】【项目:pico的波形输出】有用功能的调控UI
  8. 带电接10kV空载电缆线路与架空线路连接引线(绝缘手套作业法)
  9. pmbok第六版变化说明
  10. 什么是矩阵号系统?如何搭建及注意事项