多线程处理集合

/**多线程处理大量list
     * @param valueList
     * @throws InterruptedException
     * @throws ExecutionException
     */
    public void mutiThreadhandleList(List<String> valueList) throws InterruptedException, ExecutionException {
        // 获取核心数
        int num = Runtime.getRuntime().availableProcessors();
        int size = valueList.size();
        // 实际用这个数拆分
        int sizeSplit = size/num + num;
        List<List<String>> spiltList = PlatformUtils.spiltList(valueList, sizeSplit);
        ExecutorService executorService = Executors.newFixedThreadPool(num);
        List<Future<List<String>>> futures = new ArrayList<Future<List<String>>>(num);
        for (List<String> list : spiltList) {
            Callable<List<String>> call = new Callable<List<String>>() {
                @Override
                public List<String> call() throws Exception {
                    // do something
                    List<String> rsList = new ArrayList<String>(list.size());
                    for (String string : list) {
                        Thread.sleep(2);
                        System.out.println(string);
                        rsList.add(string + "sku");
                    }
                    return rsList;
                }
            };
            futures.add(executorService.submit(call));
        }
        List<String> rsList = new ArrayList<String>();
        for (Future<List<String>> future : futures) {
            List<String> list = future.get();
            rsList.addAll(list);
        }
        executorService.shutdown();
        System.out.println(rsList.size());
    }

 

posted on 2018-11-23 16:53  钉子His  阅读(436)  评论(0)    收藏  举报

导航