java 线程池 完成后统一回调
时间: 2023-07-06 13:34:37 浏览: 44
在 Java 中,可以使用 ExecutorService 来创建线程池,然后通过 submit 方法提交任务给线程池执行。如果需要在所有任务都执行完成后进行回调,可以使用 CountDownLatch 来实现。
具体地,可以先创建一个 CountDownLatch 对象,设置计数器的值为任务的数量。然后在每个任务执行完成后,都调用 CountDownLatch 的 countDown 方法来将计数器减一。最后,在主线程中调用 CountDownLatch 的 await 方法来等待所有任务都执行完成。
示例代码如下:
```java
ExecutorService executorService = Executors.newFixedThreadPool(10);
CountDownLatch latch = new CountDownLatch(taskCount);
for (int i = 0; i < taskCount; i++) {
executorService.submit(new Runnable() {
@Override
public void run() {
// 执行任务
// ...
// 任务执行完成后,调用 countDown 方法
latch.countDown();
}
});
}
try {
// 等待所有任务都执行完成
latch.await();
// 所有任务都执行完成后,进行回调
// ...
} catch (InterruptedException e) {
e.printStackTrace();
}
executorService.shutdown();
```
在上面的代码中,taskCount 表示任务的数量,executorService 是线程池对象。在每个任务执行完成后,都会调用 countDown 方法将计数器减一。最后,在主线程中调用 await 方法等待所有任务都执行完成。当计数器的值为 0 时,则表示所有任务都已经执行完成。最后,可以在主线程中进行回调操作。