Callable和Runnable 两种实现方法,前者更加强大
1.call(); 可以有返回值
2.call()可以抛出异常,并可以被外部捕获,获取异常信息
3.支持泛型
分步骤实现:完整代码
//通过实现Callable接口,实现1-100求和的线程
class NumThread implements Callable{
//1.重载call 类似与run()方法
@Override
public Object call() throws Exception {
//2.线程需要执行的代码放在call中
int sum =0;
for (int i = 1; i < 101; i++) {
sum+=i;
System.out.println(sum);
}
return sum;
}
public static void main(String[] args) {
//3.创建Callable实现类对象
NumThread numThread = new NumThread();
//4.将实现类对象作为参数,传入FutureTask构造器,创建FutureTask对象
FutureTask futureTask = new FutureTask(numThread);
//5.FutureTask对象作为参数创建线程Thread对象(因为FutureTask实现了Runable接口)
Thread thread = new Thread(futureTask);
//6.start()启动线程,调用call()方法
thread.start();
//7.如需获取call方法返回值
try {
Object obj = futureTask.get();
System.out.println("最终总和 :"+ obj);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
}