Java for 循环里循环调用异步方法,如何判断所有循环的线程都结束了,写出详细的代码,并给出所引用的包路径和异步方法的返回值类型
时间: 2024-03-20 09:43:59 浏览: 71
在Java中,可以使用CompletableFuture类来进行异步编程。在使用for循环调用异步方法时,可以创建一个CompletableFuture数组,用于存储每个异步方法的结果。然后使用CompletableFuture.allOf()方法等待所有结果返回,以确定所有循环的线程都结束了。
下面是一个示例代码,假设异步方法返回类型为String,所引用的包路径为java.util.concurrent:
```java
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
public class Example {
public static void main(String[] args) throws InterruptedException, ExecutionException {
CompletableFuture<String>[] futures = new CompletableFuture[10];
for (int i = 0; i < 10; i++) {
int index = i; // 需要用 final 或 effectively final 变量
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
// 异步方法逻辑
return "result " + index;
});
futures[i] = future;
}
CompletableFuture<Void> allFutures = CompletableFuture.allOf(futures);
allFutures.get(); // 等待所有结果返回
// 所有异步方法都已经完成,可以处理结果
for (CompletableFuture<String> future : futures) {
String result = future.get(); // 获取异步方法的返回值
System.out.println(result);
}
}
}
```
在上面的示例代码中,我们使用了CompletableFuture.supplyAsync()方法创建一个异步方法,并将其返回的结果存储在CompletableFuture<String>对象中。在循环结束后,我们使用CompletableFuture.allOf()方法等待所有异步方法的结果返回。最后,我们使用CompletableFuture.get()方法获取每个异步方法的返回值,并进行处理。
阅读全文