Callable简易实战 (自定义集合类)

这段代码展示了如何使用固定大小的线程池并发执行5个任务,分别进行工单统计、设备安装数统计、设备安装对比、地图统计和PV/UV统计。每个任务的结果被保存到`Future`对象中,然后按顺序整合到一个自定义的`AllOtherVO`类中。最后,所有任务执行完毕后返回结果,记录了整个过程的耗时。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//综合接口
    @RequestMapping("/allOther")
    public R allOther() throws Exception {

        long start = System.currentTimeMillis();
        //
        ExecutorService threadPool = Executors.newFixedThreadPool(5);


        List<Future<Object>> allOtherVO  = new ArrayList<Future<Object>>();


        //创建线程1,执行
        Future<Object> result1 = threadPool.submit(new Callable<Object>() {
            @Override
            public List<ProvinceCountVO> call() throws Exception {
                log.info("thread1 开始");
                //30工单
                List<ProvinceCountVO> provinceCountVOList = sdkStatisticsLogService.provinceCountBetweenDay();
                log.info("thread1 结束");
                return provinceCountVOList;
            }
        });
        allOtherVO.add(result1);
        
        //创建线程2,执行
        Future<Object> result2 = threadPool.submit(new Callable<Object>() {
            @Override
            public List<TotalNumberOfInstalledXYVO> call() throws Exception {
                log.info("thread2 开始");
                //设备安装数
                List<TotalNumberOfInstalledXYVO> totalNumberOfInstalled = appDeviceInstallService.totalNumberOfInstalled();
                log.info("thread2 结束");
                return totalNumberOfInstalled;
            }
        });
        allOtherVO.add(result2);
        //创建线程3,执行
        Future<Object> result3 = threadPool.submit(new Callable<Object>() {
            @Override
            public List<FunctionalComparisonXYVO> call() throws Exception {
                log.info("thread3 开始");
                //设备安装对比
                List<FunctionalComparisonXYVO> functionalComparisonVO = appPageVisitedService.functionalComparison();
                log.info("thread3 结束");
                return functionalComparisonVO;
            }
        });
        allOtherVO.add(result3);
        
        //创建线程4,执行
        Future<Object> result4 = threadPool.submit(new Callable<Object>() {
            @Override
            public List<TheMapStatisticalVO> call() throws Exception {
                log.info("thread4 开始");
                //地图
                List<TheMapStatisticalVO> theMapStatistical = statisticsLogTodayCountService.theMapStatistical();
                log.info("thread4 结束");
                return theMapStatistical;
            }
        });
        allOtherVO.add(result4);
        
        //创建线程5,执行
        Future<Object> result5 = threadPool.submit(new Callable<Object>() {
            @Override
            public List<PvAndUvListVO> call() throws Exception {
                log.info("thread5 开始");
                //pv uv
                List<PvAndUvListVO> pvAndUvListVOList = appPageVisitedService.pvAnduvList();
                log.info("thread5 结束");
                return pvAndUvListVOList;
            }
        });
        allOtherVO.add(result5);


        AllOtherVO allOtherVONew = new AllOtherVO();

        for(int i=0;i<=4;i++){

            Future future = allOtherVO.get(i);
            while(true) {
                if (future.isDone()) {
                    if (i == 0) {
                        allOtherVONew.setProvinceCountVOList((List<ProvinceCountVO>) future.get());
                        break;
                    }
                    if (i == 1) {
                        allOtherVONew.setTotalNumberOfInstalledVO((List<TotalNumberOfInstalledXYVO>) future.get());
                        break;
                    }
                    if (i == 2) {
                        allOtherVONew.setFunctionalComparisonVO((List<FunctionalComparisonXYVO>) future.get());
                        break;
                    }
                    if (i == 3) {
                        allOtherVONew.setTheMapStatisticalVOList((List<TheMapStatisticalVO>) future.get());
                        break;
                    }
                    if (i == 4) {
                        allOtherVONew.setPvAndUvListVOList((List<PvAndUvListVO>) future.get());
                        break;
                    }
                }
            }
        }

        //访问接口
        long end = System.currentTimeMillis();
        log.info("耗时:" + (end - start) + "ms");

        log.info("线程执行成功");
        return R.ok().data("token", "success").data("data", allOtherVONew);

    }

Future内类型使用 Object 类型是因为我需要最后的返回数据是一个自定义结合类,根据你定义的去写就好

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值