• 线程池(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;
        }
    
    
    
    
  • 相关阅读:
    Mysql基础
    Mysql基础2
    Windows CMD命令大全
    python 调试方法
    LDAP
    Linux 内核与模块调试
    Linux tee命令
    Linux kgdb命令
    OpenSSL基础知识
    Linux top命令
  • 原文地址:https://www.cnblogs.com/xinxin-ting/p/10650866.html
Copyright © 2020-2023  润新知