欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

在Java中理解异步操作与Feature接口(第一部分) - 背景知识详解

最编程 2024-07-23 18:45:49
...

想象这样一个场景:你可能希望为你的法国客户提供指定主题的热点报道。为实现这一功能,你需要向 谷歌或者Twitter的API请求所有语言中针对该主题最热门的评论,可能还需要依据你的内部算法 对它们的相关性进行排序。之后,你可能还需要使用谷歌的翻译服务把它们翻译成法语,甚至 利用谷歌地图服务定位出评论作者的位置信息,最终将所有这些信息聚集起来,呈现在你的网站上。

典型的“混聚”式应用

在这种“混聚”应用式的应用中,我们的应用可能会有以下两种需求:

  1. 由于我们调用的许多都是外部提供的接口,极有可能出现由于某些外部网络服务发生响应慢的情况。在这种情况下,我们可能希望依旧能为用户提供部分信息,比如提供带问号标记的通用地图,以文本的方式显示信息,而不是呆呆地显示一片空白屏幕,直到地图服务器返回结果或者超时退出。

  2. 要实现类似的服务,你需要与互联网上的多个Web服务通信。可是,你并不希望因为等待某 些服务的响应,阻塞应用程序的运行,浪费数十亿宝贵的CPU时钟周期。比如,不要因为等待 Facebook的数据,暂停对来自Twitter的数据处理。

以上两种场景体现了多任务程序设计的另一面。如果你的主要目标是在同一个CPU上执 行几个松耦合的任务,充分利用CPU的核,让其足够忙碌,从而最大化程序的吞吐量,那么你其实真正想做的是避免因为等待远程服务的返回,或者对数据库的查询,而阻塞线程的执行, 浪费宝贵的计算资源,因为这种等待的时间很可能相当长。这时就需要用到异步处理,在Java 5中提供的Future接口和在Java 8 中的新版实现CompletableFuture,就是处理这种情况的利器。

推荐阅读