多线程处理list业务逻辑(大数量)

       
        List<Long> listsSelect = 查询到的list;
        
        // 创建一个固定大小的线程池
        ExecutorService executorService = Executors.newFixedThreadPool(5);

        if (!CollectionUtils.isEmpty(listsSelect)) {
            // 多线程按批处理
            int size = listsSelect.size();
            for (int i = 0; i < threadNum; i++) {
                List<Long> a = new ArrayList<Long>();

                for (int j = i; j < size; j += threadNum) {
                    a.add(listsSelect.get(j));
                }

                if (a != null && a.size() > 0) {
                    List<List<Long>> ridLists = ListUtil.splitList(a, 10);
                    executorService.execute(executor(ridLists));
                }

            }

            try {
                executorService.shutdown();
                executorService.awaitTermination(1, TimeUnit.HOURS);
            } catch (Exception e) {
                
            }

        }
        
        private Runnable executor(final List<List<Long>> b) {
        Runnable run = new Runnable() {
            @Override
            public void run() {
                try {
                    for (int i = 0; i < b.size(); i++) {
                        long startTime = System.currentTimeMillis();
                        List<Long> ridList = b.get(i);

                        for (int j = 0; j < ridList.size(); j++) {
                            //业务逻辑处理
                        }

                        long endTime = System.currentTimeMillis();
                        
                    }
                } catch (Exception e) {
                    
                }

            }
        };
        return run;
    }
    
     public static <T> List<List<T>> splitList(List<T> lists, int limit) {
        int size = lists.size();
        List<List<T>> list = new ArrayList<List<T>>();
        if (limit > size) {
            list.add(lists);
            return list;
        }
        int length = size/limit +1;
        for(int i=0 ; i < length ; i ++){
            List<T> subList = new ArrayList<T>();
            for(int j =i ; j < size ; j += length){
                subList.add(lists.get(j));
            }
            list.add(subList);
        }
        
        return list;
    }

猜你喜欢

转载自blog.csdn.net/damoneric_guo/article/details/76021962
今日推荐