Callable接口:html

Runnable接口:面试

相同点:多线程
- 二者都是接口;(废话)
- 二者均可用来编写多线程程序;
- 二者都须要调用Thread.start()启动线程;
不一样点:post
- 二者最大的不一样点是:实现Callable接口的任务线程能返回执行结果;而实现Runnable接口的任务线程不能返回结果;
- Callable接口的call()方法容许抛出异常;而Runnable接口的run()方法的异常只能在内部消化,不能继续上抛;
注意点:测试
- Callable接口支持返回执行结果,此时须要调用FutureTask.get()方法实现,此方法会阻塞主线程直到获取‘未来’结果;当不调用此方法时,主线程不会阻塞!
Callable工做的Demo:url

测试结果:spa

Runnable工做的Demo:线程

测试结果:3d

写此篇的缘由是一次面试中问到Callable与Runnable的区别,当时用的多的是Runnable,而Callable使用不多!code
比较了二者后(网上查了很多),发现Callable在不少特殊的场景下仍是颇有用的!最后留点抄的代码,加深对Callable的认识!
