注:本文基于jdk1.8
1 .异步不需要返回值
CompletableFuture.runAsync (
示例代码如下:
公共JSON结果测试
JsonResult result=new JsonResult (;
CompletableFuture.runAsync (
//准备请求
jsonresultpostresult=app tool.post request (URL、params、headers );
//要求结果处理
if (! postResult.getCode ().equals ('0) ) }
//要求失败
logger.error ('请求失败');
}
);
返回结果;
}
在上面的代码中,异步执行一个请求,方法不需要等待开机自检请求的结束;
2 .异步需要返回值
CompletableFuture.supplyAsync (
示例代码如下:
公共字符串测试(
completablefuturefuture=completablefuture.supply async ((-)//准备请求
jsonresultpostresult=app tool.post request (URL、params、headers ); returnpostResult.getCode (;
); //get ) )方法将一直堵塞,直到feature完成。 result是异步结果,其中get ()用try-catch包裹
String result=feature.get (; 返回结果;
}
3 .等待任意数量的异步全部完成
CompletableFuture.allOf (
3.1等待任何数量的异步全部完成,而不考虑异步结果;
示例代码如下:
公共字符串测试(
listUrls=Arrays.aslist(…;
List contentFutures=urls.stream ().map (URL-completablefuture.run async ) )-{//准备请求
jsonresultpostresult=app tool.post request (URL; returnpostResult.getCode (;
() ).collect(collectors.tolist ) );
completablefutureallfutures=completablefuture.all of (
内容futures.to array (newcompletablefuture [内容futures.size ()
); //等待异步全部结束
allFutures.join (; 返回'1';
}
在此,我们使用了join (等待异步结束。 join ) )和get ) )的方法相似,但区别如下
join ) )抛出未选中的执行; get ) )投checked exception需要用try-catch包裹
3.2 .必须等待任意数量的异步全部完成,异步返回结果;
示例代码如下:
公共字符串测试(
listUrls=Arrays.aslist(…;
List contentFutures=urls.stream ().map (URL-completablefuture.supply async ) )-{//准备请求
jsonresultpostresult=app tool.post request (URL; returnpostResult.getCode (;
() ).collect(collectors.tolist ) );
completablefutureallfutures=completablefuture.all of (
内容futures.to array (newcompletablefuture [内容futures.size ()
).then apply (v-{ returncontent futures.stream ).map (content future-content future.join ) )。
); 设置等待try{//异步获取返回结果的等待时间40s
list data=allfutureresult.get (40,TimeUnit.SECONDS );
//'0'失败'1'成功returndata.indexof('0' )-1? '0' : '1';
}catch(exceptione ) {
Logger.error(e; 返回'0';
}
}
线程池
下一次更新