Java使用线程池确保所有任务执行并且拿到执行结果
时间: 2023-07-05 21:36:22 浏览: 93
可以使用Java中的Executor框架来实现线程池。具体步骤如下:
1. 创建一个ExecutorService对象,该对象代表线程池。
2. 创建Callable或Runnable任务,Callable任务可以返回执行结果。
3. 将任务提交给线程池,使用submit()方法提交任务,并将返回的Future对象保存。
4. 使用Future对象的get()方法获取任务执行结果,该方法会阻塞直到任务执行完成并返回结果。
下面是一个使用线程池执行任务并获取执行结果的示例代码:
```
ExecutorService executor = Executors.newFixedThreadPool(5); // 创建线程池,最多同时执行5个任务
List<Future<Integer>> resultList = new ArrayList<Future<Integer>>(); // 用于保存任务执行结果的列表
for (int i = 0; i < 10; i++) { // 提交10个任务
Callable<Integer> task = new MyTask(i);
Future<Integer> future = executor.submit(task); // 提交任务,并保存返回的Future对象
resultList.add(future); // 将Future对象保存到列表中
}
for (Future<Integer> future : resultList) { // 遍历任务执行结果
try {
int result = future.get(); // 获取任务执行结果,该方法会阻塞直到任务执行完成并返回结果
System.out.println("Task result: " + result);
} catch (Exception e) {
e.printStackTrace();
}
}
executor.shutdown(); // 关闭线程池
```
其中,MyTask是一个实现了Callable接口的任务类,用于执行具体的任务并返回执行结果。在上面的代码中,我们提交了10个MyTask任务到线程池中,并将返回的Future对象保存到resultList列表中。然后,我们遍历resultList列表,使用Future对象的get()方法获取任务执行结果,并进行处理。最后,我们调用executor.shutdown()方法关闭线程池。
阅读全文