遍历未来任务时,可以使用Future的isDone()方法来检查任务是否已完成。这可以帮助我们在处理任务结果之前先判断任务的状态。
以下是一个示例代码,演示了如何遍历未来任务并在处理任务结果之前先检查isDone()方法:
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.*;
public class FutureTaskTraversalExample {
public static void main(String[] args) {
ExecutorService executorService = Executors.newFixedThreadPool(5);
List> futureTasks = new ArrayList<>();
// 提交5个任务
for (int i = 0; i < 5; i++) {
Future futureTask = executorService.submit(new Task(i));
futureTasks.add(futureTask);
}
// 遍历任务列表
for (Future futureTask : futureTasks) {
// 检查任务是否完成
if (futureTask.isDone()) {
try {
// 获取任务结果并处理
String result = futureTask.get();
System.out.println("Task result: " + result);
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
} else {
System.out.println("Task is not done yet");
// 可以继续执行其他操作,或者等待任务完成
}
}
executorService.shutdown();
}
static class Task implements Callable {
private final int taskId;
public Task(int taskId) {
this.taskId = taskId;
}
@Override
public String call() throws Exception {
// 模拟任务执行
Thread.sleep(2000);
return "Task " + taskId + " completed";
}
}
}
在上面的示例中,我们创建了一个线程池并提交了5个任务。然后,我们遍历任务列表并使用isDone()方法检查每个任务的状态。如果任务已完成,我们通过get()方法获取任务结果并进行处理。如果任务尚未完成,我们可以执行其他操作,或者等待任务完成。
注意:在使用isDone()方法时,如果任务未完成,调用get()方法将会阻塞当前线程,直到任务完成。如果不希望阻塞线程,可以使用get(long timeout, TimeUnit unit)方法设置超时时间,或者使用isDone()方法来进行轮询,以等待任务完成。
上一篇:遍历未分类的列表项
下一篇:遍历唯一标识以获取子项