Java 中是否有相当于 Promise.race() 的函数?

问题描述 投票:0回答:2

我面临这个问题,我想同时运行两个函数,使用先完成的函数的结果,并立即丢弃另一个函数。

在 Java 中完成此任务的最佳实践是什么?

java multithreading asynchronous
2个回答
0
投票
import java.util.concurrent.*;

HelloWorld 类 {

public static String awaitRace(CompletableFuture<String> promise1,CompletableFuture<String> promise2)throws Exception{

    while(true){

        if(promise1.isDone()){

            promise2.cancel(true);

            return promise1.get();

        }

        if(promise2.isDone()){

            promise1.cancel(true);

            return promise2.get();

        }

    }

}

public static void main(String[] args) {

   

    

    CompletableFuture<String> promise1 = new CompletableFuture<String>();

   

    promise1 = promise1.supplyAsync(()->{

      

       for(int i=0;i<100;i++){

           System.out.print("HEAVY_1");

       }

      

       return "Result1";

    });

   

    CompletableFuture<String> promise2 = new CompletableFuture<String>();

   

    promise2 = promise2.supplyAsync(()->{

        for(int i=0;i<100;i++){

          System.out.print("HEAVY_2");

       }

      

       return "Result2";

    });

    try{

    String result = awaitRace(promise1,promise2);

    System.out.println("First Completed  :"+result);

    }

    catch(Exception e){

        System.out.println(e);

    }

   

    

    System.out.println("Hello, World!");

}

这是我自己的实现,除此之外我们还有来自完整未来本身的任何内容


0
投票

我为 java 和 kotlin 编写了一个 Promise 库。它更易于使用且轻巧,请在 https://pro4j.com/ 处查看。

© www.soinside.com 2019 - 2024. All rights reserved.