/**
* @param reqList
* @param localUrl
* @param type? ? 0:攝像頭抓拍
* @return
*/
public static ListcapturePic(List reqList, String localUrl, Integer type)throws ExecutionException, InterruptedException {
List> capList =new ArrayList<>();
? ? List list =new ArrayList<>();
? ? if (CollectionUtils.isNotEmpty(reqList)) {
for (MdCameraInfoReq req : reqList) {
String picUrl ="";
? ? ? ? ? ? if (Consts.INT_ZERO.equals(type)) {
//開啟線程
? ? ? ? ? ? ? ? CompletableFuture future = CompletableFuture.supplyAsync(() -> {
return CapturePicUtils.capturePic(req.getIp(), req.getPort(), req.getUserName(), req.getPwd(), req.getChannel(), localUrl);
? ? ? ? ? ? ? ? }, executorFinishWeighImgService);
? ? ? ? ? ? ? ? //抓圖線程list
? ? ? ? ? ? ? ? capList.add(future);
? ? ? ? ? ? }else {
picUrl = CapturePicUtils.captureNvrPic(req, localUrl);
? ? ? ? ? ? }
if (StringUtils.isNotBlank(picUrl)) {
list.add(picUrl);
? ? ? ? ? ? }
}
}
List captures =new ArrayList<>();
? ? CompletableFuture completableFuture = CompletableFuture.allOf(capList.toArray(new CompletableFuture[capList.size()]));
? ? //阻塞,直到所有任務結束
? ? completableFuture.join();
? ? CompletableFuture> captureList = completableFuture.thenApply(returnFuture -> {
capList.forEach(future -> {
try {
if (Objects.nonNull(future.get(5, TimeUnit.SECONDS))) {
captures.add(future.get(5, TimeUnit.SECONDS));
? ? ? ? ? ? ? ? }else {
log.error("獲取數(shù)據(jù)超時");
? ? ? ? ? ? ? ? }
}catch (InterruptedException e) {
log.error("終端異常:{}", e);
? ? ? ? ? ? }catch (ExecutionException e) {
log.error("capturePic執(zhí)行異常:{}", e);
? ? ? ? ? ? }catch (TimeoutException e) {
log.error("capturePic超時:{}", e);
? ? ? ? ? ? }
});
? ? ? ? return captures;
? ? });
? ? List baseList = captureList.get().stream().collect(Collectors.toList());
? ? return baseList;
}
CompletableFuture多任務執(zhí)行
最后編輯于 :
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
相關閱讀更多精彩內(nèi)容
- 什么是Future 接口 很多場景下,我們想去獲取線程運行的結果,而通常使用execute方法去提交任務是無法獲得...
- 寫文章 草稿保存中… 邀請預覽 發(fā)布 為什么問題 幾年前,當NoSQL像其他所有團隊一樣趨勢時,我們的團隊也熱衷于...
- 1.業(yè)務背景 存在如下的業(yè)務需求:對于一個批任務,包含多個子任務taskId,在多線程并發(fā)執(zhí)行時,如果出現(xiàn)一個子任...
- 對于的使用可以參照這篇文章:https://blog.csdn.net/jianjun200607/article...