Java 9为何让开发者如此兴奋,来看看它的这一基本功能!

简介:

Java 9即将在2017年7月正式发布,并提供一份关于新增和修订的功能以及一些特性的说明清单。对JDK增强提议(简称JEP)进行搜索时,我们发现了JEP 266中包含了:对CompletableFuture进行了不少更新,和更新了并发功能和要支持Reactive Streams机制相关的内容,这引起了我的注意。

Java 9为何让开发者如此兴奋,来看看它的这一基本功能!

在本文中,我们就聊聊JEP 266的新增和修订的功能吧,并且它很有可能成为Java 9 的特性之一。

1.Java 9将迎来哪些强化?

作为甲骨文公司起草的JDK增强提议(简称JEP)之一,它包含了很多有趣的更新,目的是用于解决并行机制相关的问题。

根据这份提议,Java 9将迎来以下变更与更新:

各接口支持Reactive Streams发布的订阅框架。

CompletableFuture API将得到全面改进,包括支持支持延迟、超时、子类化和其它方法。

更多小型调整与javadoc规范修改。

Java 9为何让开发者如此兴奋,来看看它的这一基本功能!

这里我们主要分析两项核心内容。第一项内容是Java 9将支持Reactive Streams,这个提议来自Java技术社区提出的改进计划,目的是改进开发者的并行工作流程。其次是CompletableFuture API的修复性提升,可以让开发者回到Future。

但这些都有怎样的实际意义呢?

2.Flow类介绍

第一项更新的“各接口支持Reactive Streams发布的订阅框架”,就是将新的Flow类嵌套进去,和可供开发者用于创建自定义组件的SubmissionPublisher。

让我们逐一进行讨论。Reactive Streams能够解决背压(back-pressure)难题。当输入任务速率高于系统的处理能力时,就会发生数据累积并会对未处理数据提供一个缓冲区。

Java 9为何让开发者如此兴奋,来看看它的这一基本功能!

就此,我们与Reactive Streams开发团队Akka高级开发者Konrad Malawski进行了交流,他解释了Reactive Streams 的重要性以及如何使用。

甲骨文方面指出,这项新增强将包含“一套小型接口,用以对接Reactive Streams项目中各类得到广泛使用的定义接口。”

而Flow类的作用也正在于此。Reactive Steams由4个Java接口构建而成:

处理器(Processor)

发布商(Publisher)

订阅用户(Subscriber)

订阅(Subscription)

Flow类允许各互关联接口与静态方法建立受控流程组件,发布者产生由一个或多个订阅者消费的项目,每个订阅者由订阅管理。

Reactive Streams位于容器对象java.util.concurrent.Flow之下。大开发者可以在这里找到 Flow.Publisher,一个用作 lambda 表达式或方法引用的赋值目标功能接口。此接口将显著简化面向Flow.Subscription的元素生成方式,并由Flow.Subscription将二者关联起来。

Java 9为何让开发者如此兴奋,来看看它的这一基本功能!

另一项元素为Flow.Subscriber,是用异步工作机制运作,并能通过请求实现触发。它能能够从Flow.Subscription处获取多个元素,大家可根据需求自定义缓冲区大小。

这些接口同时适用于并发与分布式异步设置,且接口之间的通信,是通过一种简单的流控制形式实现,并可用于避免发生资源管理的问题。

感兴趣的朋友可以查看关于java.util.concurrent.Flow的代码示例。转到此处:http://gee.cs.oswego.edu/dl/concurrency-interest/index.html/

另外,大家也无需等待Java 9正式发布即可体验Reactive Streams接口,目前也已经在多种第三方库采用此类接口。

3.CompletableFuture新特性

Java 8首次引入CompletableFuture是,就已经对Future进行了扩展。Future适用于,当我们不希望或者不需要一个直接计算结果的时候,我们会收到一个 Future 对象来保存计算完成时分配的实际结果。

Java 9为何让开发者如此兴奋,来看看它的这一基本功能!

CompletableFuture对Future对象做出两方面扩展。其能够在无需任何异步等待的情况下,通过调用complete()方法即可显式完成。另外,它还允许利用一系列操作中,构建起数据处理管道。

如此一来,任意类型的值皆能在 Future 中使用默认返回值,即使当前计算尚未完成,它也可使用默认即时结果。这些更新将能够有效解决开发者在使用Java 8时面临的部分难题。

总结

Java 9确实为我们带来一系列重大更新与改进,其中 JEP 266 会是最有趣的一部分改进。另外,我们认为JEP 266,也是甲骨文发布的最值得关注的更新之一,因为其源自技术社区本身的倡议,旨在帮助开发者解决异步流程处理中的一些常见难题。我们对此深表赞赏,同时也期待着Java 9的正式发布。

本文转自d1net(转载)

相关文章
|
2月前
|
SQL Java 数据库连接
为何JDBC是Java开发者的“心头好”?原因竟然这么简单!
为何JDBC是Java开发者的“心头好”?原因竟然这么简单!
33 3
|
2月前
|
安全 Java API
告别繁琐编码,拥抱Java 8新特性:Stream API与Optional类助你高效编程,成就卓越开发者!
【8月更文挑战第29天】Java 8为开发者引入了多项新特性,其中Stream API和Optional类尤其值得关注。Stream API对集合操作进行了高级抽象,支持声明式的数据处理,避免了显式循环代码的编写;而Optional类则作为非空值的容器,有效减少了空指针异常的风险。通过几个实战示例,我们展示了如何利用Stream API进行过滤与转换操作,以及如何借助Optional类安全地处理可能为null的数据,从而使代码更加简洁和健壮。
79 0
|
11天前
|
Java
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
21 2
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
|
20天前
|
监控 算法 Java
深入理解Java中的垃圾回收机制在Java编程中,垃圾回收(Garbage Collection, GC)是一个核心概念,它自动管理内存,帮助开发者避免内存泄漏和溢出问题。本文将探讨Java中的垃圾回收机制,包括其基本原理、不同类型的垃圾收集器以及如何调优垃圾回收性能。通过深入浅出的方式,让读者对Java的垃圾回收有一个全面的认识。
本文详细介绍了Java中的垃圾回收机制,从基本原理到不同类型垃圾收集器的工作原理,再到实际调优策略。通过通俗易懂的语言和条理清晰的解释,帮助读者更好地理解和应用Java的垃圾回收技术,从而编写出更高效、稳定的Java应用程序。
|
1月前
|
Java API 开发者
【Java字节码的掌控者】JDK 22类文件API:解锁Java深层次的奥秘,赋能开发者无限可能!
【9月更文挑战第8天】JDK 22类文件API的引入,为Java开发者们打开了一扇通往Java字节码操控新世界的大门。通过这个API,我们可以更加深入地理解Java程序的底层行为,实现更加高效、可靠和创新的Java应用。虽然目前它还处于预览版阶段,但我们已经可以预见其在未来Java开发中的重要地位。让我们共同期待Java字节码操控新篇章的到来,并积极探索类文件API带来的无限可能!
|
2月前
|
SQL Java 数据库连接
Java开发者必知:JDBC连接数据库的“三大法宝”
Java开发者必知:JDBC连接数据库的“三大法宝”
21 7
|
2月前
|
Java 开发者 UED
“Java开发者必看:异步编程实战解析,掌握这些技巧,让你的代码跑得更快!
【8月更文挑战第30天】随着互联网技术的发展,系统性能和用户体验成为关注焦点。异步编程作为提高应用响应速度和吞吐量的技术,在Java中广泛采用。本文详细介绍了Java异步编程的概念与优势,并通过实战示例展示了如何利用Future、Callable及CompletableFuture在实际项目中实施异步编程,帮助开发者更好地理解和应用这一技术。
43 2
|
2月前
|
Java 开发者
Java 编程风格与规范:跟上时代热点,打造高质量代码,为开发者梦想保驾护航
【8月更文挑战第30天】本文强调了Java编程中代码质量和可维护性的重要性,详细介绍了命名规范、代码格式和注释的最佳实践,如使用描述性的命名、适当的缩进及空行,以及关键代码部分的注释说明,同时还提供了避免魔法值和减少代码重复的建议与示例,帮助提升团队协作效率和项目长期发展。
43 2
|
2月前
|
Java 开发者
Java多线程教程:使用ReentrantLock实现高级锁功能
Java多线程教程:使用ReentrantLock实现高级锁功能
35 1
|
2月前
|
Java 测试技术 开发者
掌握抽象类与接口的高级技巧!超越普通Java开发者
掌握抽象类与接口的高级技巧!超越普通Java开发者
27 2