我面临这个问题,我想同时运行两个函数,使用先完成的函数的结果,并立即丢弃另一个函数。
在 Java 中完成此任务的最佳实践是什么?
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!");
}
这是我自己的实现,除此之外我们还有来自完整未来本身的任何内容
我为 java 和 kotlin 编写了一个 Promise 库。它更易于使用且轻巧,请在 https://pro4j.com/ 处查看。