多线程执行并从线程中取值FutureTask&Callable

   Thread实现了Runnable接口中的run方法,但是run方法是没有返回值滴!!

public abstract void run();

如果希望得到线程的返回值,可以实现Callable接口,调用call 方法:

V call() throws Exception;

这里就来分享一种实现。

类之间的关系如下图所示:

多线程执行并从线程中取值FutureTask&Callable_第1张图片

测试代码:

package com.xue.gang;


import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;


/**
 * 只是测试用FutureTask中取到值
 * */
public class FutureTaskRunner {
public static void main(String[] args) throws InterruptedException, ExecutionException{
/**构造可获取结构的Runable对象*/

FutureTask futureTask = new FutureTask<Object>(new Callable(){
public Object call() throws Exception{
int sum=0;
for(int i =0;i<100;i++){
sum +=i;
System.out.println("index is : " + i);
}
return  sum;
}
});
/**启个线程来执行*/
Thread thread=new Thread(futureTask);
thread.start();
/**执行完了把线程中的值拿回来*/
System.out.println("执行完了把线程中的值拿回来:" + futureTask.get());
}
}

你可能感兴趣的:(多线程执行并从线程中取值FutureTask&Callable)