1,实现Callabale<V>接口而不是Runnable接口。
2, 在call方法中返回需要的信息。
3.使用ExecutorService.submit调用,返回值是Future<V>。
4.通过get获得结果,也可以使用isDone进行检测;否则get可能阻塞直到有结果准备就绪。
看个例子:
package com.wjy.multithread;
import java.util.concurrent.Callable;
public class MyCallable implements Callable<String>{
private int id;
public MyCallable(int id){
this.id=id;
}
@Override
public String call() throws Exception {
// TODO Auto-generated method stub
return "id: "+id;
}
}
测试代码:
ExecutorService exec=Executors.newCachedThreadPool();
Future<String> str=exec.submit(new MyCallable(66));
try {
System.out.println("result: "+str.get());
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
exec.shutdown();
}
运行结果:
result: id: 66