当前位置 : 主页 > 编程语言 > java >

Java多线程之CompletableFuture的演示代码 *

来源:互联网 收集:自由互联 发布时间:2022-07-05
import java . util . concurrent . CompletableFuture ; import java . util . concurrent . TimeUnit ; public class Test03 { public static void main ( String [] args ) throws Exception { long l = System . currentTimeMillis (); // 暂存数据 /
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;

public class Test03 {
public static void main(String[] args) throws Exception {
long l = System.currentTimeMillis();

// 暂存数据
// 任务 1:调用推荐接口获取数据
CompletableFuture<String> recommendTask =
CompletableFuture.supplyAsync(() -> {

System.out.println("recommendTask开始工作: 获取推荐接口数据...");
sleepSeconds(5);//睡眠五秒
return "[recommendTask 板块数据]";
});
// 任务 2:调用搜索接口获取数据
CompletableFuture<String> searchTask =
CompletableFuture.supplyAsync(() -> {
System.out.println("searchTask开始工作: 调用搜索接口获取数据...");
sleepSeconds(3); 睡眠五秒

return " [searchTask 板块数据] ";
});
// 任务 3:任务 1 和任务 2 完成后执行,聚合结果
CompletableFuture<String> polymerizationTask =
recommendTask.thenCombine(searchTask, (t1Result, t2Result) -> {
System.out.println("polymerizationTask开始工作" + t1Result + " 与 " + t2Result + "实现去重逻辑处理");
return "[recommendTask 和 searchTask 板块数据聚合结果]";
});
// 等待任务 3 执行结果
String result = polymerizationTask.get(6, TimeUnit.SECONDS);
System.out.println("主线程获取polymerizationTask的结果:" + result);
System.out.println("执行任务需要的毫秒值: " + (System.currentTimeMillis() - l) + "毫秒");
}

// 睡眠工具类
static void sleepSeconds(int timeout) {
try {
TimeUnit.SECONDS.sleep(timeout);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

控制台打印结果
可以看到 recommendTask 和 searchTask 异步去执行, 然后polymerizationTask等待recommendTask 和searchTask 执行完之后汇总他们的结果,

recommendTask开始工作: 获取推荐接口数据...
searchTask开始工作: 调用搜索接口获取数据...
polymerizationTask开始工作[recommendTask 板块数据] 与 [searchTask 板块数据] 实现去重逻辑处理
主线程获取polymerizationTask的结果:[recommendTask 和 searchTask 板块数据聚合结果]
执行任务需要的毫秒值: 5058毫秒


【本文来源:香港服务器租用 http://www.558idc.com/st.html欢迎留下您的宝贵建议】
网友评论