Runnable是執行工作的獨立任務,但是它不返回任何值。在Java SE5中引入的Callable是一種具有類型參數的泛型,它的類型參數表的是從方法call()中返回的值,並且必須使用ExecutorServices.submit()方法調用它,下面是一個簡單示例。
實驗結果:
result of TaskWithResult 0 result of TaskWithResult 1 result of TaskWithResult 2 result of TaskWithResult 3 result of TaskWithResult 4
submit()方法回產生Future對象,它用Callable返回結果的特定類型進行了參數化。可以用isDone()方法來查詢Future是否已經完成,當任務完成時,它具有一個結果,可以調用get()方法獲取該結果。也可以不用isDone()進行檢查就直接調用get(),在這種情況下,get()將阻塞,直至結果准備就緒。還可以在試圖調用get()來獲取結果之前,先調用具有超時的get(),或者調用isDone()來查看任務是否完成。