CompletionService主要用于将新添加的异步任务与已完成任务的结果分离开来
主要方法:
public Future<V> submit(Callable<V> task)
提交要执行任务,并返回表示任务结果的Future
public Future<V> take()
获取并移除表示下一个已完成任务的Future,如果目前不存在这样的任务,则等待。
public Future<V> poll()
获取并移除表示下一个已完成任务的Future,如果不存在这样的任务,则返回null。
例如:
main:
ExecutorService threadPool = Executors.newCachedThreadPool();
CompletionService<Integer> cs = new ExecutorCompletionService<Integer>(threadPool);
for (int i = 0; i < 5; i++) {
final int taskID = i;
cs.submit(new Callable<Integer>() {
public Integer call() throws Exception {
return taskID;
}
});
}
for (int i = 0; i < 5; i++) {
try {
System.out.println(cs.take().get());
} catch (Exception e) {
e.printStackTrace();
}
}