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 - 任务执行完毕
         */
    }
}
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值