天天看點

CompletableFuture 雙層循環嵌套

import java.util.ArrayList;

import java.util.List;

import java.util.Random;

import java.util.concurrent.CompletableFuture;

public class Test2 {

    public static void main(String[] args) throws Exception {

//        ThreadPoolExecutor executor = new ThreadPoolExecutor(3, 6, 60L, TimeUnit.SECONDS, new ArrayBlockingQueue<>(10));

        CompletableFuture<?> future = CompletableFuture

                // 執行異步任務

                .supplyAsync(() -> {

                    int result = new Random().nextInt(100);

                    System.out.println("任務A:" + result);

                    return result;

                }).thenComposeAsync((current) -> {

                        List<CompletableFuture<?>> f1s = new ArrayList<>();  //

                        for(int i=1;i<4;i++) {

                            CompletableFuture<?> f1 = CompletableFuture.supplyAsync(()->{return "";}).thenComposeAsync((fb) -> {

                                System.out.println("f1執行結束");

                                //

                                List<CompletableFuture<?>> f2s = new ArrayList<>();  //

                                for (int j = 1; j < 4; j++) {

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

                                        System.out.println("f2執行結束");

                                        return  ".f2結果";

                                    });

                                    f2s.add(f2);

                                }

                                CompletableFuture<?> t = CompletableFuture.allOf(f2s.toArray(new CompletableFuture[f2s.size()]));

                                return t;

                                //

                            });

                            f1s.add(f1);

                        }

                        CompletableFuture<?> tmp = CompletableFuture.allOf(f1s.toArray(new CompletableFuture[f1s.size()]));

                        return tmp;

                });

        System.out.println(future.get());

        System.out.println("end");

//        executor.shutdown();

    }

}