线程池 处理 list 集合

    @Test
    public void testThreade() throws ExecutionException, InterruptedException {
        long start = System.currentTimeMillis();
        List<String> list = new ArrayList<>();
        for (int i = 0; i < 49; i++) {
            list.add(i + "");
        }
        int nThreads = 4;
        int size = list.size();
        StringBuffer ret = new StringBuffer();
        ExecutorService executorService = Executors.newFixedThreadPool(nThreads);
        List<Future<String>> futures = new ArrayList<Future<String>>(nThreads);
        for (int i = 0; i < nThreads; i++) {
            List<String> subList = new ArrayList<>();
            subList.addAll( list.subList(size / nThreads * i, size/ nThreads * (i + 1)));
            if (i+1==nThreads){
                if (list.size()%nThreads!=0){
                    subList.addAll(list.subList((size/nThreads*(i+1)),list.size()));
                }
            }
            final List<String> finalList = new ArrayList<>(subList);
            Callable<String> task = ()->{
                    System.out.println("-------------------------------");
                    for (String s : subList) {
                        System.out.println(s);
                    }
                    Thread.sleep(2000);
                    return "1";
            };
            futures.add(executorService.submit(task));
        }

        for (Future<String> future : futures) {
            ret.append(future.get());
        }
        executorService.shutdown();
        long end = System.currentTimeMillis();
        System.out.println((end-start));
    }
```
    

你可能感兴趣的:(java)