【问题标题】:CompletableFuture result calculationCompletableFuture结果计算
【发布时间】:2023-01-04 00:45:23
【问题描述】:

有什么区别 CompletableFuture.allOf(futuresList.toArray(new CompletableFuture[0])CompletableFuture.allOf(futuresList.toArray(new CompletableFuture[futuresList.size()]

我需要同时返回 CompletableFuture<List> 要求是我想确保第一个任务在调用第二个任务之前完成,然后以 CompletableFuture<List> 格式返回结果。如果我首先创建结果列表,我将如何使用 CompletableFuture<List> 返回它。任何指针都会有所帮助。提前致谢。

【问题讨论】:

    标签: completable-future


    【解决方案1】:

    对于问题1,根据ArrayList源代码, futuresList.toArray(new CompletableFuture[0])futuresList.toArray(new CompletableFuture[futuresList.size()]) 都导致相同的结果。

    区别:

    1、size=0,ArrayList创建完全需要的大小来容纳新元素。

    2、size=futuresList.size(),ArrayList使用提供的数组来保存元素,并测试提供的数组是否还有剩余空间,将a[size]设置为null。

    最佳实践:使用 size=0

    对于问题 2,一些技巧如下,

        static void play() {
            List<CompletableFuture<Integer>> all = firstTask();
            secondTask();
        }
        
        static List<CompletableFuture<Integer>> firstTask() {
            CountDownLatch countDownLatch = new CountDownLatch(3);
            CompletableFuture<Integer> f1 = CompletableFuture.supplyAsync(() -> {countDownLatch.countDown(); return 1;});
            CompletableFuture<Integer> f2 = CompletableFuture.supplyAsync(() -> {countDownLatch.countDown(); return 2;});
            CompletableFuture<Integer> f3 = CompletableFuture.supplyAsync(() -> {countDownLatch.countDown(); return 3;});
            try {
                countDownLatch.await();
            } catch (InterruptedException e) {
                //
            }
            return Arrays.asList(f1, f2, f3);
            
        }
        
        static void secondTask() {
            System.out.println("do secondTask");
        }
    
    
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-19
    • 1970-01-01
    • 1970-01-01
    • 2017-09-09
    • 1970-01-01
    • 2021-04-16
    相关资源
    最近更新 更多