Callable和Future
Callable接口类似于Runnable,从名字就可以看出来了,但是Runnable不会返回结果,并且无法抛出返回结果的异常,而Callable功能更强大一些,被线程执行后,可以返回值,这个返回值可以被Future拿到,也就是说,Future可以拿到异步执行任务的返回值。
使用实现Callable接口,实现多线程加法求和
/** * @ClassName: CallableAndFuture.java * @Description: * @author yangcb * @date 2016年11月17日 下午2:11:01 */ public class CallableAndFuture { public static void main(String[] args) throws InterruptedException, ExecutionException { int num=0; for(int i=1;i<=10;i++){ MyCallable myCallable=new MyCallable(i); FutureTask<Integer> futureTask=new FutureTask<Integer>(myCallable); new Thread(futureTask).start(); num=num+futureTask.get(); } System.out.println(num); } } /*** * 实现callable接口 * @author yangcb * */ class MyCallable implements Callable{ int i; public MyCallable(int i) { this.i=i; } @Override public Object call() throws Exception { int j=0; /** * 从1加到100算法,单个线程求和 */ for(int num=(i-1)*10+1;num<=i*10;num++){ j=j+num; } return j; } }