Java中我有一个方法是通过循环线程submit执行我想等所有线程执行完再执行后续的方法如何实现
你可以使用ExecutorService的invokeAll()方法来实现等待所有线程执行完毕再继续执行后续方法。
首先,你需要创建一个ExecutorService对象,并使用Executors.newFixedThreadPool()方法来创建一个固定线程数的线程池。例如,下面的代码创建了一个具有10个线程的线程池:
ExecutorService executor = Executors.newFixedThreadPool(10);
然后,你可以使用submit()方法将任务提交给线程池执行。例如,下面的代码提交了10个任务给线程池:
List<Future<?>> futures = new ArrayList<>();
for (int i = 0; i < 10; i++) {
Future<?> future = executor.submit(() -> {
// 在这里写你的任务逻辑
});
futures.add(future);
}
接下来,你可以使用invokeAll()方法等待所有任务执行完毕。invokeAll()方法接收一个Collection类型的任务列表,并返回一个List<Future<T>>类型的结果,其中T是你任务的返回类型。你可以将futures列表传递给invokeAll()方法,然后使用get()方法获取任务的执行结果。例如:
try {
List<Future<?>> results = executor.invokeAll(futures);
for (Future<?> result : results) {
result.get(); // 等待任务执行完毕,并获取执行结果
}
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
最后,记得在所有任务执行完毕后关闭线程池,释放资源:
executor.shutdown();
完整的代码示例:
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.*;
public class Main {
public static void main(String[] args) {
ExecutorService executor = Executors.newFixedThreadPool(10);
List<Future<?>> futures = new ArrayList<>();
for (int i = 0; i < 10; i++) {
Future<?> future = executor.submit(() -> {
// 在这里写你的任务逻辑
});
futures.add(future);
}
try {
List<Future<?>> results = executor.invokeAll(futures);
for (Future<?> result : results) {
result.get(); // 等待任务执行完毕,并获取执行结果
}
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
executor.shutdown();
}
}
这样,在所有线程执行完毕后,你可以继续执行后续的方法
原文地址: http://www.cveoy.top/t/topic/iJJC 著作权归作者所有。请勿转载和采集!