我们平时接触到的多线程Thread,Runnable,这两种方式不能返回线程执行后的结果。
假如有Thread1、Thread2、Thread3三个线程分别统计信息,
所有线程统计完毕交给Thread4汇总,应当如何实现?
Callable和Future,前者产生结果,后者拿到结果。
Callable接口类似于Runnable,从名字就可以看出来了,但是Runnable不会返回结果,并且无法抛出返回结果的异常,而Callable功能更强大一些,被线程执行后,可以返回值,这个返回值可以被Future拿到,也就是说,Future可以拿到异步执行任务的返回值,下面来看一个简单的例子:
public void init() throws ServletException {
Callable<String> callable = new Callable<String>() {
public String call() throws Exception {
start(); // 使用另一个线程来执行该方法,会避免占用Tomcat的启动时间
return "Collection Completed";
}
};
FutureTask<String> task = new FutureTask<String>(
callable);
new Thread(task).start();
}
原文地址:[http://blog.csdn.net/ghsau/article/details/7451464](转载)