1. 程式人生 > 其它 >Callable、Future、FutureTash詳解

Callable、Future、FutureTash詳解

Callable、Future、FutureTash詳解

Callable與Future是在JAVA的後續版本中引入進來的,Callable類似於Runnable介面,實現Callable接 口的類與實現Runnable的類都是可以被執行緒執行的任務。
三者之間的關係:
Callable是Runnable封裝的非同步運算任務。
Future用來儲存Callable非同步運算的結果。
FutureTask封裝Future的實體類
1、Callable與Runnbale的區別
a、Callable定義的方法是call,而Runnable定義的方法是run。
b、call方法有返回值,而run方法是沒有返回值的。
c、call方法可以丟擲異常,而run方法不能丟擲異常。
2、Future


Future表示非同步計算的結果,提供了以下方法,主要是判斷任務是否完成、中斷任務、獲取任務執行結果

 public interface Future<V> {
        boolean cancel(boolean mayInterruptIfRunning);
        boolean isCancelled();
        boolean isCancelled();
        V get() throws InterruptedException, ExecutionException;
        V get(long timeout, TimeUnit unit) 
                throws InterruptedException, ExecutionException, TimeoutException;
    }

3、FutureTask
可取消的非同步計算,此類提供了對Future的基本實現,僅在計算完成時才能獲取結果,如果計算尚未完 成,則阻塞get方法。

public class FutureTask<V> implements RunnableFuture<V> 
public interface RunnableFuture<V> extends Runnable, Future<V>

FutureTask不僅實現了Future介面,還實現了Runnable介面,所以不僅可以將FutureTask當成一個 任務交給Executor來執行,還可以通過Thread來建立一個執行緒。