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