多线程:Future和Callable结合使用案例

方法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;
    }
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值