FutureTask+CompletableFuture使用简介

本文介绍了使用FutureTask实现并发任务、自定义线程池优化CompletableFuture,以及结合thenCombine进行异步计算的例子。展示了如何利用Java并发库进行高效编程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.star.multiThread;


import java.util.concurrent.*;

public class FutureTest {

    public static void main(String[] args) throws ExecutionException, InterruptedException {
        // testCompletableFuture1();
        testCompletableFuture2();
        testCompletableFuture3();

    }

    // FutureTask
    private static void testCompletableFuture1() throws InterruptedException, ExecutionException {
        ExecutorService executorService = Executors.newFixedThreadPool(10);

        FutureTask<String> futureTask = new FutureTask<>(new Callable<String>() {
            @Override
            public String call() throws Exception {
                return "success";
            }
        });
        executorService.submit(futureTask);

        String str = futureTask.get();
        System.out.println(str + "success");
    }

    // 自定义线程池,优化CompletableFuture
    public static void testCompletableFuture2() throws ExecutionException, InterruptedException {

        ExecutorService executorService = Executors.newFixedThreadPool(10);

        CompletableFuture<String> medalInfoCompletableFuture = CompletableFuture.supplyAsync(() -> {
                    return "success";
                },
                executorService)
                .exceptionally(throwable -> "Throwable exception message:" + throwable.getMessage());

        String str = medalInfoCompletableFuture.get();
        System.out.println(str + "success");

    }

    //CompletableFuture+thenCombine
    // 一个线程计算奇数和,一个线程计算偶数和,main线程将他们相加
    public static void testCompletableFuture3() throws ExecutionException, InterruptedException {
        CompletableFuture<Integer> oddNumber = CompletableFuture.supplyAsync(() -> {
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return 1 + 3 + 5 + 7 + 9;
        });
        CompletableFuture<Integer> evenNumber = CompletableFuture.supplyAsync(() -> {
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return 2 + 4 + 6 + 8;
        });
        long startTime = System.currentTimeMillis();
        CompletableFuture<Integer> resultFuturn = oddNumber.thenCombine(evenNumber, (odd, even) -> {
            return odd + even;
        });
        System.out.println("运行结果是:" + resultFuturn.get() + " 总共耗时:" + (System.currentTimeMillis() - startTime) + "毫秒");
    }


}
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值