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

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

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

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

                if (a != null && a.size() > 0) {
                    List> 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> b) {
        Runnable run = new Runnable() {
            @Override
            public void run() {
                try {
                    for (int i = 0; i < b.size(); i++) {
                        long startTime = System.currentTimeMillis();
                        List ridList = b.get(i);

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

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

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

你可能感兴趣的:(java总结实用)