CSS 的背景
阿新 • • 發佈:2021-07-01
每天一點點,驚喜不間斷/** * 使用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; }