实现步骤:
1:创建一个实现Callable接口的类
2:重写call方法,将此线程需要执行的操作声明在call()方法中
3:创建Callable接口实现类的对象
4:将此Callable接口实现类的对象传递给FutureTask构造器,创建FutureTask对象
5:将FutureTask对象作为参数传递给Thread类,Thread类对象调用start()方法启动线程:此处的参数为Runnable类型,
6:调用get()方法获取call()方法的返回值,如果不需要call()方法的返回值,可以不调用get()方法。
优点:可以有返回值,可以抛出异常,方法支持泛型的返回值
代码实现:
/**
* 计算1到100偶数的和
*/
//1:创建一个实现Callable接口的类
class NumThread implements Callable<Integer> {
//2:重写call方法,将此线程需要执行的操作声明在call()方法中
@Override
public Integer call() throws Exception {
int sum = 0;
for(int i = 1; i <= 100; i++) {
if(i % 2 == 0) {
System.out.println(Thread.currentThread().getName() + "计算到" + i);
sum += i;
}
}
return sum;
}
}
public class ThreadNew {
public static void main(String[] args) {
//3:创建Callable接口实现类的对象
NumThread numThread = new NumThread();
//4:将此Callable接口实现类的对象传递给FutureTask构造器,创建FutureTask对象
FutureTask<Integer> integerFutureTask = new FutureTask<>(numThread);
//5:将FutureTask对象作为参数传递给Thread类,Thread类对象调用start()方法启动线程:此处的参数为Runnable类型,
//FutureTask同时实现了Runnable,Future接口,所以FutureTask对象就可以作为此处的参数
new Thread(integerFutureTask).start();
try {
//6:调用get()方法获取call()方法的返回值,如果不需要call()方法的返回值,可以不调用get()方法。
Integer sum = integerFutureTask.get();
System.out.println("计算结果为:"+sum);
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
}