java如何等待线程池的其中一个线程结束,才执行主线程
时间: 2024-05-12 13:13:05 浏览: 78
Java中可以通过使用Future来实现等待线程池中的某个线程结束才执行主线程的操作。具体步骤如下:
1. 创建一个线程池,例如使用Executors.newFixedThreadPool()方法创建一个固定大小的线程池。
2. 将需要执行的任务提交到线程池中,例如使用submit()方法将任务提交到线程池中。
3. 对每个任务都创建一个Future对象,该对象表示任务的执行结果。
4. 使用Future.get()方法来阻塞主线程,等待特定的任务执行完成。
5. 当任意一个任务执行完成后,Future.get()方法返回结果,主线程就可以继续执行了。
示例代码如下:
```
ExecutorService executor = Executors.newFixedThreadPool(10);
List<Future<?>> futures = new ArrayList<>();
for (int i = 0; i < 10; i++) {
Future<?> future = executor.submit(new Runnable() {
public void run() {
// 执行任务
}
});
futures.add(future);
}
// 等待任意一个任务执行完成
Future<?> completedFuture = executor.invokeAny(futures);
// 执行主线程
System.out.println("任务执行完成:" + completedFuture);
```
在上面的代码中,我们使用了executor.invokeAny(futures)方法来等待任意一个任务执行完成。该方法会阻塞主线程,直到任意一个任务执行完成并返回结果,然后返回该任务的Future对象。最后,我们打印出任务执行完成的信息,表示主线程可以继续执行了。
阅读全文