Callable和Runnable的区别:
- 返回值:Callable有返回值,Runnable没有返回值
- 异常:Runnable没有容错机制,意味着如果出现异常必须立即处理;Callable有容错机制,意味着出现异常之后可以向上抛出
- 启动方式:Runnable可以通过Thread来启动,也可以通过线程池的execute、submit来处理;Callable线程只能通过线程池的submit来处理`
线程实现callable的借口代码举例:
public class ThreadPoolCallable {
public static void main(String[] args) throws InterruptedException, ExecutionException {
ExecutorService es = Executors.newCachedThreadPool();
// 表示将线程提交给线程池进行处理
// 将处理结果封装成了一个Future对象
// submit可以处理Callable和Runnable线程
Future<String> f = es.submit(new CDemo());
System.out.println(f.get());
es.shutdown();
}
}
// 只能利用线程池来执行
class CDemo implements Callable<String> {
@Override
public String call() throws Exception {
return "\\index.html";
}
}