网站首页设计制作教程,昌乐哪里有做网站的,郑州新闻发布会直播,个人简历在线制作CompletableFuture与未来#xff1a;与Java 8新功能保持异步 Java 8于2014年3月发布#xff0c;并附带了许多新功能。 鲜为人知的#xff0c;极为有用却被人误解的功能之一是对Future接口的全新改进#xff0c;即扩展#xff1a;CompletableFuture T。 在下面的… CompletableFuture与未来与Java 8新功能保持异步 Java 8于2014年3月发布并附带了许多新功能。 鲜为人知的极为有用却被人误解的功能之一是对Future接口的全新改进即扩展CompletableFuture T。 在下面的文章中我们将提供CompletableFuture的整体视图以及它与简单的Future有何不同以及何时有用。 异步Java代码 Java 7向我们介绍了Future它表示异步计算的结果。 使用Future对象的主要优点是您可以在等待外部资源的同时做其他事情。 一种等待资源的非阻塞方式。 使用Future意味着您可以编写一个方法而不是立即返回结果而是将返回Future对象。 当您需要实际结果时只需使用Future.get即可在计算完成后返回该值。 您还可以得到方法检查计算是否是做的一个办法取消/检查它是否被取消。 例如假设您要调用某个外部资源例如…… Marvel的开发人员API 拔出所有名称中带有字母“ C”的超级英雄 Future String marvel executor.submit(new Callable String () {public String call() {return getMarvelHeroWithCharacter(“C”); // totally not making this up}
});// other very important stuff of course, non-blocking ftwSystem.out.println(marvel.get()); // this bit is blocking if the result isn’t ready yet 是的如果我们确实想使用完全异步的非阻塞选项那我们就不走运了。 我们无法保证未来确实存在我们可能必须等待。 这是CompletableFuture出现的地方它有助于解决棘手的问题。 那么CompletableFuture有什么新功能 CompletableFuture T扩展了Future T并使之……可完成。 考虑到Future对象在Java 8之前是受限制的只有5种可用方法所以这很重要。 此新的和改进的CompletableFuture具有2个主要优点 可以通过调用complete方法显式完成此操作而无需任何同步等待。 它允许将来使用默认/中间结果使用默认返回值提供任何类型的值即使计算未完成。 使用数十种新方法它还允许您通过一系列操作来构建管道数据流程。 您可以找到许多CompletableFuture模式例如从任务创建CompletableFuture或构建CompletableFuture链。 可通过Oracle的CompletableFuture文档获得完整列表。 回到我们的简单示例假设Marvel的API没有返回及时的结果并且getMarvelHeroWithCharacter仍在处理中这是很耗时的而与此同时我们已经完成了其他所有想做的事情。 假设我们不想等待 我们的生命结束了 CompletableFuture可以帮助我们返回中间结果。 像……神秘因为在最坏的情况下她可以变身为其他超级英雄。 CompletableFuture String marvel executor.submit(new Callable String () {public String call() {return getMarvelHeroWithCharacter(“C”);}
});// other stuff goes heremarvel.complete(“Mystique”); // sets a “default” value if not yet completedSystem.out.println(marvel.get()); // non-blocking 您也可以预先创建一个完整的CompletableFuture该函数将返回一个已知值。 如果您想将已知值与需要计算的值结合起来这在测试环境中可能会派上用场 CompletableFuture String cf CompletableFuture.completedFuture(Im done!);
cf.isDone(); // return true
cf.join(); // return Im done 还有数十种其他更有用的方法它们包括转换并作用于一个CompletableFuturethenApply在完成时运行代码thenAccept / thenRun将两个CompletableFuture组合在一起等等。 要获得完整的指南我们建议您阅读Java 8CompletableFuture的权威指南 。 满足选择 如果您使用的是Guava或Scala及其Futures 则此新功能可能听起来很熟悉。 它与Guava的ListenableFuture相似后者为Future对象定义了一个一致的API用于注册完成回调。 与新的CompletableFuture相似添加回调的功能允许以异步有效的方式响应传入的事件。 您可以注册要在计算完成后执行的回调并支持基本Future接口不支持的许多操作。 当艰难的时刻 使用CompletableFuture使我们能够与我们的代码一起运行而不必等待结果但是它仍然不能保证您的代码在生产中运行时不会中断。 发生错误时您将需要尽快识别和分析它们以部署修补程序。 对于此类情况 Takipi将使您能够在问题出现时有效地解决代码中的问题而不必“等”到其他人遇到它们。 最后的想法 CompletableFuture恰好适合作为异步编程趋势的一部分该趋势在过去几年中变得很流行。 难怪每个人都在谈论它因为我们可以使用它同时运行许多任务从而实现最佳工作流程。 如果您已经是异步编程的狂热爱好者则可能需要查看我们有关7种您必须知道的反应性编程工具的文章 。 翻译自: https://www.javacodegeeks.com/2016/06/back-completablefuture-java-8-feature-highlight.html