方法submit(Callable<T>)可以执行参数为Callable的任务
方法get()用于获取返回值。
项目中的案例代码:
/** * 测试申请的测试任务列表 * @param testTask * @return */ @RequestMapping("getList") public Result getList(TerminalTestTask testTask){ List<Map> list = new ArrayList<>(); List<Map> tempTestTaskList = terminalTestTaskService.queryList(testTask); ExecutorService executorService = Executors.newCachedThreadPool(); List<Future<Map>> results = new ArrayList<Future<Map>>(); //Future 相当于是用来存放Executor执行的结果的一种容器 for(Map testTaskMap : tempTestTaskList){ Long taskId = Long.parseLong(String.valueOf(testTaskMap.get("taskId"))); //测试用例汇总情况 //Map testSummaryMap = terminaltestRecordService.getSheetTestSummary(taskId); // testTaskMap.putAll(testSummaryMap); //测试状态转换 Integer testStatus = Integer.parseInt(String.valueOf(testTaskMap.get("testStatus"))); testTaskMap.put("testStatusName",Constants.TEST_RECORD_STATUS.get(testStatus)); //处理状态转换 Integer taskStatus = Integer.parseInt(String.valueOf(testTaskMap.get("taskStatus"))); testTaskMap.put("taskStatusName",Constants.TESTTASK_STATUS.get(taskStatus)); //多线程统计-优化 //测试用例汇总情况 results.add(executorService.submit(new SheetTestSummaryCallAble(taskId,testTaskMap,terminaltestRecordService))); //list.add(testTaskMap); } for(Future<Map> fs :results){ try { list.add(fs.get()); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } } return Result.ok(list); }
public class SheetTestSummaryCallAble implements Callable<Map> { private Long taskId; private TerminaltestRecordService terminaltestRecordService; private Map map; public SheetTestSummaryCallAble(Long taskId,Map map,TerminaltestRecordService terminaltestRecordService){ this.taskId = taskId; this.terminaltestRecordService = terminaltestRecordService; this.map = map; } @Override public Map call() throws Exception { Map testSummaryMap = terminaltestRecordService.getSheetTestSummary(taskId); map.putAll(testSummaryMap); return map; } }