Java中我有一个方法是通过循环线程submit执行我想等所有线程执行完再执行后续的方法
可以使用ExecutorService配合CountDownLatch来实现等待所有线程执行完毕再执行后续方法的效果。具体的步骤如下:
- 创建一个
ExecutorService对象,用于管理线程池。 - 创建一个
CountDownLatch对象,用于等待所有线程执行完毕。 - 使用循环将任务提交给线程池执行,在每个任务执行完毕后,调用
CountDownLatch的countDown()方法,表示一个线程已经执行完毕。 - 在所有任务提交完毕后,调用
CountDownLatch的await()方法,等待所有线程执行完毕。 - 所有线程执行完毕后,即可执行后续的方法。
下面是一个示例代码:
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Example {
public void parallelExecution() {
int threadCount = 5; // 线程数量
ExecutorService executorService = Executors.newFixedThreadPool(threadCount);
CountDownLatch countDownLatch = new CountDownLatch(threadCount);
for (int i = 0; i < threadCount; i++) {
executorService.submit(() -> {
// 执行任务
// ...
countDownLatch.countDown(); // 当前线程执行完毕,计数器减1
});
}
try {
countDownLatch.await(); // 等待所有线程执行完毕
} catch (InterruptedException e) {
e.printStackTrace();
}
// 所有线程执行完毕,执行后续方法
// ...
executorService.shutdown(); // 关闭线程池
}
}
在上述示例代码中,通过ExecutorService创建一个固定大小的线程池,并使用CountDownLatch来等待所有线程执行完毕。在每个线程执行完毕后,调用countDownLatch.countDown()方法,表示一个线程已经执行完毕。在所有线程提交完毕后,调用countDownLatch.await()方法等待所有线程执行完毕。当所有线程执行完毕后,即可执行后续的方法。最后,记得关闭线程池
原文地址: http://www.cveoy.top/t/topic/iJJd 著作权归作者所有。请勿转载和采集!