Runnable和Callable接口比较
相同点:
- 两者都是接口;
- 两者都可用来编写多线程程序;
- 两者都需要调用Thread.start()启动线程;
不同点
- 实现Callable接口的线程能返回执行结果;而实现Runnable接口的方法不能返回结果;
- Callable接口的call()方法允许抛出异常;而Runnable接口的run()方法不允许抛出异常;
- 实现Callable接口的线程可以调用Future.cancel取消执行,而实现Runnable接口的线程不能;
注意点:
== Callable 接口支持返回执行结果,此时需要调用FutureTask.get()方法实现,此方法会阻塞主线程直到获取’将来‘结果;当不调用此方法时,主线程不会阻塞 !==