Callable接口:html
View Code
Runnable接口:面試
View Code
相同點:多線程
- 二者都是接口;(廢話)
- 二者均可用來編寫多線程程序;
- 二者都須要調用Thread.start()啓動線程;
不一樣點:post
- 二者最大的不一樣點是:實現Callable接口的任務線程能返回執行結果;而實現Runnable接口的任務線程不能返回結果;
- Callable接口的call()方法容許拋出異常;而Runnable接口的run()方法的異常只能在內部消化,不能繼續上拋;
注意點:測試
- Callable接口支持返回執行結果,此時須要調用FutureTask.get()方法實現,此方法會阻塞主線程直到獲取‘未來’結果;當不調用此方法時,主線程不會阻塞!
Callable工做的Demo:url
View Code
測試結果:spa
View Code
Runnable工做的Demo:線程
View Code
測試結果:3d
View Code
寫此篇的緣由是一次面試中問到Callable與Runnable的區別,當時用的多的是Runnable,而Callable使用不多!code
比較了二者後(網上查了很多),發現Callable在不少特殊的場景下仍是頗有用的!最後留點抄的代碼,加深對Callable的認識!
View Code