java中ExecutorService使用多线程处理业务

时间:2021-01-30 23:19:22
ExecutorService executorService = Executors.newFixedThreadPool(5);  
  
List<CancelApprovalCallable> callables = new List<>();  
for(int i=0,len=idsArray.size();i<len;i++){
    String id = idsArray.get(i);
    CancelApprovalCallable callable = new CancelApprovalCallable(id,domain);
    callables.add(callable);
}
List<Future<JSONObject>> resultList = new ArrayList<>();
try{
    resultList = executorService.invokeAll(callables);
}catch(InterruptedException e){
    log.error("execute concurrent thread error",e);
}finally{
    if(!executorService.isShutdown() || !executorService.isTerminated()){
        executorService.shutdown();
    }
}

/**
*批量获取线程执行结果,循环处理每条结果数据
*/
for(Future<JSONObject> future : resultList){
    JSONObject resp2 = null;
    try{
        resp2 = future.get();
    }catch(Exception e){
        log.error("execute concurrent thread error",e);
    }
    if(resp2 == null){
        continue;
    }
}
class CancelApprovalCallable implements Callable<JSONbject>{
        
        private String id;
        private String domain;
        CancelApprovalCallable(String id,String domain){
            this.id=id;
            this.domain = domain;
        }
        /* (non-Javadoc)
         * @see java.util.concurrent.Callable#call()
         */
        @Override
        public JSObject call() throws Exception {
            
            return null;
        }
        
    }