zoukankan      html  css  js  c++  java
  • 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;
    }
    每天一点点,惊喜不间断
  • 相关阅读:
    知识搜索
    使用 getopt() 进行命令行处理
    【新提醒】夏新大v安卓4.1尝鲜最新更新版本发布(包含进步版)1124更新 大V综合交流区 360论坛
    搜狗知立方高调亮相 开启知识计算新时代
    socat: Linux / UNIX TCP Port Forwarder
    Crontab 每两周执行一次
    python 命令行解析 optionparser
    crontab jojo's blog--快乐忧伤都与你同在 BlogJava
    搜索引擎开始「实体搜索」新领域竞争,Google、百度分别发力实体搜索产品
    netcat(nc)的替代产品 Socat
  • 原文地址:https://www.cnblogs.com/wszn-java/p/14981400.html
Copyright © 2011-2022 走看看