Callable
創建線程可以繼承Thread類,重寫run方法,也可以使用匿名內部類,也可實現Runnable接口,但是實現Runnable類,重寫run方法並沒有返回值。
從JDK1.5之後,java提供Callable接口,裏面只有一個call方法作爲線程執行體。實現Callable接口,重寫call方法就可以創建一個線程,與run方法相比,Call方法更強大。
→ call方法可以有返回值
→ call方法可以聲明拋出異常
但是有一個問題,Callable幾口是新增接口,不是Runnable接口的子接口,所以Callable對象不能直接作爲Thread的target。而且call是作爲線程執行體被調用的,那麼誰來獲取返回值呢?這就要用到了Future了
Future:
java5提供了Future接口來獲取call的返回值,
future是異步的,子線程在等待的時候,主線程不用等待,如果A需要B的執行結果,那麼A線程不需要等待B執行完畢後才能拿到結果
通過get方法獲取call方法中的返回值。這個方法使得必須等到子線程結束才能拿到返回值