CompletableFuture执行多线程任务

这是一段比较实用的代码段

当我们有很多任务需要多线程执行的时候,就可以使用


@Slf4j
public class Demo01CompleteFutureMain {
    public static void main(String[] args) {
//        任务列表
        List<Integer> jobList = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14);
        int nThreads = 3;
//        工作线程池
        ExecutorService executorService = new ThreadPoolExecutor(nThreads, nThreads,
                0L, TimeUnit.MILLISECONDS,
                new LinkedBlockingQueue<>());
//        接收每个任务的执行结果
        List<CompletableFuture<String>> completableFutures = new ArrayList<>(jobList.size());

//        任务分派
        for (int i = 0; i < jobList.size(); i++) {

            try {
                Integer jobId = jobList.get(i);

                CompletableFuture<String> integerCompletableFuture = CompletableFuture.supplyAsync(() -> {

                    log.info("模拟任务执行,执行任务:{}", jobId);
//                    睡几秒
                    return jobId + "任务执行结果";
                }, executorService);
//            保存本次任务执行结果
                completableFutures.add(integerCompletableFuture);
            } catch (Exception e) {
                log.error(e.getMessage(), e);
            }

        }

        log.info("任务分派结束");

//        等待全部任务执行完毕
        CompletableFuture[] completableFutures1 = new CompletableFuture[completableFutures.size()];
        CompletableFuture<Void> voidCompletableFuture =
                CompletableFuture.allOf(completableFutures.toArray(completableFutures1));
        try {
            voidCompletableFuture.get();
            log.info("打印执行结果");
            completableFutures.stream()
                    .forEach(tmp -> {
                        try {
                            log.info("执行结果:{}", tmp.get());
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    });
        } catch (Exception e) {
            e.printStackTrace();
        }

        executorService.shutdown();
        log.info("任务执行完毕");

        /*
12:06:10.158 [pool-1-thread-1] INFO org.zln.Demo01CompleteFutureMain - 模拟任务执行,执行任务:1
12:06:10.158 [pool-1-thread-2] INFO org.zln.Demo01CompleteFutureMain - 模拟任务执行,执行任务:2
12:06:10.159 [pool-1-thread-3] INFO org.zln.Demo01CompleteFutureMain - 模拟任务执行,执行任务:3
12:06:10.158 [main] INFO org.zln.Demo01CompleteFutureMain - 任务分派结束
12:06:15.167 [pool-1-thread-3] INFO org.zln.Demo01CompleteFutureMain - 模拟任务执行,执行任务:6
12:06:15.167 [pool-1-thread-2] INFO org.zln.Demo01CompleteFutureMain - 模拟任务执行,执行任务:4
12:06:15.167 [pool-1-thread-1] INFO org.zln.Demo01CompleteFutureMain - 模拟任务执行,执行任务:5
12:06:20.172 [pool-1-thread-1] INFO org.zln.Demo01CompleteFutureMain - 模拟任务执行,执行任务:7
12:06:20.172 [pool-1-thread-3] INFO org.zln.Demo01CompleteFutureMain - 模拟任务执行,执行任务:9
12:06:20.172 [pool-1-thread-2] INFO org.zln.Demo01CompleteFutureMain - 模拟任务执行,执行任务:8
12:06:25.175 [pool-1-thread-3] INFO org.zln.Demo01CompleteFutureMain - 模拟任务执行,执行任务:10
12:06:25.175 [pool-1-thread-1] INFO org.zln.Demo01CompleteFutureMain - 模拟任务执行,执行任务:11
12:06:25.175 [pool-1-thread-2] INFO org.zln.Demo01CompleteFutureMain - 模拟任务执行,执行任务:12
12:06:30.180 [pool-1-thread-3] INFO org.zln.Demo01CompleteFutureMain - 模拟任务执行,执行任务:13
12:06:30.180 [pool-1-thread-1] INFO org.zln.Demo01CompleteFutureMain - 模拟任务执行,执行任务:14
12:06:35.184 [main] INFO org.zln.Demo01CompleteFutureMain - 打印执行结果
12:06:35.189 [main] INFO org.zln.Demo01CompleteFutureMain - 执行结果:1任务执行结果
12:06:35.189 [main] INFO org.zln.Demo01CompleteFutureMain - 执行结果:2任务执行结果
12:06:35.189 [main] INFO org.zln.Demo01CompleteFutureMain - 执行结果:3任务执行结果
12:06:35.189 [main] INFO org.zln.Demo01CompleteFutureMain - 执行结果:4任务执行结果
12:06:35.189 [main] INFO org.zln.Demo01CompleteFutureMain - 执行结果:5任务执行结果
12:06:35.189 [main] INFO org.zln.Demo01CompleteFutureMain - 执行结果:6任务执行结果
12:06:35.189 [main] INFO org.zln.Demo01CompleteFutureMain - 执行结果:7任务执行结果
12:06:35.189 [main] INFO org.zln.Demo01CompleteFutureMain - 执行结果:8任务执行结果
12:06:35.189 [main] INFO org.zln.Demo01CompleteFutureMain - 执行结果:9任务执行结果
12:06:35.189 [main] INFO org.zln.Demo01CompleteFutureMain - 执行结果:10任务执行结果
12:06:35.189 [main] INFO org.zln.Demo01CompleteFutureMain - 执行结果:11任务执行结果
12:06:35.189 [main] INFO org.zln.Demo01CompleteFutureMain - 执行结果:12任务执行结果
12:06:35.189 [main] INFO org.zln.Demo01CompleteFutureMain - 执行结果:13任务执行结果
12:06:35.189 [main] INFO org.zln.Demo01CompleteFutureMain - 执行结果:14任务执行结果
12:06:35.189 [main] INFO org.zln.Demo01CompleteFutureMain - 任务执行完毕
         */
    }
}
发布了102 篇原创文章 · 获赞 12 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/m0_37208669/article/details/105444715