Java CompletableFuture:allOf等待所有異步線程任務結束


/**
 * 使用java8 CompletableFuture.runAsync實現 多線程處理,獲取治理任務明細
 * 使用線程安全list synchronizedList
 * @param env
 * @param systemEnNameList
 * @param ldcList
 * @param instanceList
 * @param strategyMap
 * @param actStrategyMap
 * @param unActStrategyMap
 * @param activitedSystemList
 * @param unActivitedSystemList
 * @return
 */
private List<ResourceRuleTaskDetail> getTaskDetailsUseThreads(String env, List<String> systemEnNameList, List<String> ldcList, List<String> instanceList, Map<String, JSONArray> strategyMap, Map<String, JSONArray> actStrategyMap, Map<String, JSONArray> unActStrategyMap, List<String> activitedSystemList, List<String> unActivitedSystemList) {
	// 對於集合寫操作:synchronizedList 相對於Vector 、CopyOnWriteArrayList性能更佳。 讀操作建議CopyOnWriteArrayList
	List<ResourceRuleTaskDetail> resourceRuleTaskDetailList = Collections.synchronizedList(new ArrayList<ResourceRuleTaskDetail>());
	CompletableFuture<Void> cf1 = CompletableFuture.runAsync(()->{
		if (MapUtils.isNotEmpty(strategyMap)) {
			List<ResourceRuleTaskDetail> strategyTaskDetailList = resourceDealStrategyNewService.dealStrategyToGetGovernDataNew(systemEnNameList, ldcList, env, strategyMap, instanceList);
			resourceRuleTaskDetailList.addAll(strategyTaskDetailList);
		}
	});

	CompletableFuture<Void> cf2 = CompletableFuture.runAsync(()->{
		if (MapUtils.isNotEmpty(actStrategyMap) && CollectionUtils.isNotEmpty(activitedSystemList)) {
			List<ResourceRuleTaskDetail> actStrategyTaskDetailList = resourceDealStrategyNewService.dealStrategyToGetGovernDataNew(activitedSystemList, ldcList, env, actStrategyMap, instanceList);
			resourceRuleTaskDetailList.addAll(actStrategyTaskDetailList);
		}
	});
	CompletableFuture<Void> cf3 = CompletableFuture.runAsync(()->{
		if (MapUtils.isNotEmpty(unActStrategyMap) && CollectionUtils.isNotEmpty(unActivitedSystemList)) {
			List<ResourceRuleTaskDetail> unActStrategyTaskDetailList = resourceDealStrategyNewService.dealStrategyToGetGovernDataNew(unActivitedSystemList, ldcList, env, unActStrategyMap, instanceList);
			resourceRuleTaskDetailList.addAll(unActStrategyTaskDetailList);
		}
	});
	// join等待所有線程執行完成
	CompletableFuture.allOf(cf1, cf2, cf3).join();
	return resourceRuleTaskDetailList;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM