java5线程库中,使用Callable提交任务,可以获得任务的运行完后的一个返回值。使用线程池的submit方法提交Callable任务,submit方法将返回一个Future对象,此对象的get方法是线程阻塞的,直到任务运行结束后才会返回任务的返回值。
多个任务提交到线程池后,想要多个获取任务的运行完后的结果,可使用CompletionService类,此类可以获取按执行完顺序返回的结果。
下面是小示例:
ExecutorService pool2=Executors.newFixedThreadPool(10);
CompletionService<String> completionService=new ExecutorCompletionService<String>(pool2);
for(int i=0;i<10;i++){
final int index=i;
completionService.submit(new Callable<String>() {
public String call() throws Exception {
Thread.sleep(10);
return index+"";
}
});
}
for(int i=0;i<10;i++){
try {
System.out.println(completionService.take().get());
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}