java promise实现_基于JAVA的Promise模式实现

Promise模式用于异步编程,允许启动任务而不必等待结果。本文通过一个示例介绍了如何在JAVA中使用Promise实现这一模式,通过JPromise库将任务包装成Promise对象,从而减少等待时间,提高效率。此外,还讨论了异常捕获和自定义线程池的配置。
摘要由CSDN通过智能技术生成

Promise模式是一种异步编程模式,即我们可以先开始一个任务,拿到这个任务的凭据而并不需要立即得到这个任务的执行结果才继续往下执行,我们拿着这个凭证可以在之后任何需要的时候去兑换结果。这篇文章主要介绍一种基于JAVA的Promise模式实现并结合一些例子。

原始实现

为了能够让大家对这个模式有个印象,我举个简单点的例子,假如我们正在做百度百科这个页面,我们需要给前端提供一个服务(下面的代码我们将结果打印出来来模拟),可以根据id获取百科条目的内容,具体的例子是我们想要获取某个明星的百度百科信息。而这个明星的信息有两个相关内容可能需要调用别人的服务来获取,一个是获取明星相关的人物信息;另一个是获取这个明星相关的新闻。我们假设这两个服务分别位于不同的业务部门,而且由于业务的复杂性,服务比较慢,我用下面的代码来表示:

/**

* @author float.lu

*/

public class OldLongCallExample {

public static void main (String ...s) {

long start = System.nanoTime();

//280ms

String result1 = getRelatedRoles();

//250ms

String result2 = getRelatedNews();

System.out.println("Result:" + result1 + result2);

System.out.println("take:" + TimeUnit.NANOSECONDS

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中,并没有内置的Promise类,但是可以使用一些库或框架来实现Promise的功能。其中一个常用的库是CompletableFuture,它提供了一个强大的异步编程工具,可以用来处理异步任务的完成或失败。 使用CompletableFuture,你可以通过以下步骤创建和使用Promise: 1. 创建一个CompletableFuture对象,可以通过CompletableFuture类的静态方法提供一个初始值,或者使用构造函数创建一个空的CompletableFuture对象。 2. 使用`thenApply()`、`thenAccept()`、`thenRun()`等方法,将回调函数附加到CompletableFuture对象上。这些方法允许你定义在Future完成时要执行的操作。 3. 在合适的时候,通过调用CompletableFuture的`complete()`、`completeExceptionally()`、`cancel()`等方法,将结果或异常传递给CompletableFuture对象。 4. 当你需要等待CompletableFuture的完成时,可以使用`get()`方法阻塞当前线程,直到Future完成并返回结果。你还可以使用`join()`方法等待Future的完成,但不会抛出异常。 总的来说,CompletableFuture提供了一种简洁而灵活的方式来处理异步任务的结果。它允许你链式地组合多个异步操作,并在每个操作完成后执行特定的操作。 是Netty4源码中的一段代码,展示了如何在Promise对象中添加监听器并触发相应的回调函数。 是一个使用Promise的典型例子,在这个例子中,使用Promise来处理异步的AJAX请求。 提到了Java实现Promise模式的另一个类:FutureTask。FutureTask是Java标准库中实现了Future接口的具体类,可以看作是Promise模式的参与者实例。 综上所述,虽然Java中没有内置的Promise类,但是可以使用CompletableFuture等库来实现Promise的功能。这些库提供了一种方便的方式来处理异步任务的完成和失败,并允许你以链式的方式组合多个异步操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值