zoukankan      html  css  js  c++  java
  • 线程池(ExecutorService)初体验

    背景:查询月统计数据,因为查询日统计数据功能已经实现。月统计数据,只是参一个List(date) 参数,for循环调用日统计,然后把结果整合就OK。

    问题:单线程跑  太耗时间

    解决方案:使用多线程,利用 ExcutorService 创建一个线程池,使用 CountDownLatch,来做 锁机制。

     CountDownLatch的锁机制,可以访问:https://www.cnblogs.com/liun1994/p/7396026.html

    下面是实例代码:

    /**
         * 月 统计数据
         *
         * @return
         * @Param
         */
        @Override
        public ResultData<List<StatResultPo>> queryStatDataList(List<String> dateList) {
            ResultData<List<StatResultPo>> resultData = ResultData.built();
            List<StatResultPo> list = new ArrayList<>();
            /*StatResultPo statResultPo;
            for (String date : dateList) {
                statResultPo = processedStatData(date);
                list.add(statResultPo);
            }*/
            //设置 线程锁
            CountDownLatch cdl = new CountDownLatch(dateList.size());
            //线程池
            ExecutorService es1 = Executors.newFixedThreadPool(10);
    
            for (String date : dateList) {
                es1.execute(new Runnable() {
                    @Override
                    public void run() {
                        list.add(processedStatData(date));
                        //每调用一次countDown()方法,在构造函数中初始化的count值就减1,当N个线程都调用了这个方法count的值等于0,
                        //然后主线程就能通过await方法,恢复自己的任务。
                        cdl.countDown();
                    }
                });
            }
            try {
                //恢复主线程
                cdl.await();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            /*Collections.sort(list, new Comparator<StatResultPo>(){
                @Override
                public int compare(StatResultPo o1, StatResultPo o2) {
                    //升序
                    return o1.getDate().compareTo(o2.getDate());
                }
            });*/
            Collections.sort(list, StatResultPo::compareTo);
            // 最终返回
            resultData.success(list);
            return resultData;
        }
    
    
    
    
  • 相关阅读:
    团队项目-第一阶段冲刺-5
    用户场景分析
    第九周总结
    团队项目-第一阶段冲刺-3
    团队项目-第一阶段冲刺-2
    团队项目-第一阶段冲刺-1
    个人工作任务认领
    实验一:个人博客
    MFC onpaint() ondraw()
    MFC 虚函数与消息映射区别
  • 原文地址:https://www.cnblogs.com/xinxin-ting/p/10650866.html
Copyright © 2011-2022 走看看