java使用线程池,需要获取校验结果
时间: 2023-08-12 09:20:55 浏览: 48
如果你想要获取线程池中每个线程执行的结果,可以通过使用 `Future` 接口来实现。具体地说,当你提交一个线程任务时,线程池会返回一个 `Future` 对象,你可以通过该对象的 `get()` 方法来获取该线程任务的执行结果。如果线程任务还没有执行完成,`get()` 方法会阻塞当前线程直到该任务执行完成并返回结果。以下是一个示例代码:
```java
ExecutorService executorService = Executors.newFixedThreadPool(5);
List<Future<Integer>> resultList = new ArrayList<>();
for (int i = 0; i < 10; i++) {
Future<Integer> future = executorService.submit(new Callable<Integer>() {
@Override
public Integer call() throws Exception {
// 执行任务,返回一个整数结果
return 1;
}
});
resultList.add(future);
}
for (Future<Integer> future : resultList) {
try {
Integer result = future.get();
// 处理结果
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
executorService.shutdown();
```
在上述代码中,我们使用了 `ExecutorService` 创建了一个固定线程数为 5 的线程池,并提交了 10 个任务。每个任务都是一个实现了 `Callable` 接口的匿名内部类,在 `call()` 方法中执行任务并返回一个整数结果。我们将每个任务的 `Future` 对象保存到一个列表中,然后通过循环遍历列表,依次调用 `get()` 方法获取每个任务的执行结果。如果某个任务还没有执行完成,当前线程会被阻塞直到该任务执行完成。最后,我们调用 `shutdown()` 方法来关闭线程池。