Java執行緒 六 Callable和Future

2021-06-18 00:53:22 字數 1335 閱讀 5697

callable介面類似於runnable,從名字就可以看出來了,但是runnable不會返回結果,並且無法丟擲返回結果的異常,而callable功能更強大一些,被執行緒執行後,可以返回值,這個返回值可以被future拿到,也就是說,future可以拿到非同步執行任務的返回值,下面來看乙個簡單的例子:

public

class callableandfuture   

};  

futuretaskfuture = new futuretask(callable);  

new thread(future).start();  

try  catch (interruptedexception e)  catch (executionexception e)   

}  }  

futuretask實現了兩個介面,runnable和future,所以它既可以作為runnable被執行緒執行,又可以作為future得到callable的返回值,那麼這個組合的使用有什麼好處呢?假設有乙個很耗時的返回值需要計算,並且這個返回值不是立刻需要的話,那麼就可以使用這個組合,用另乙個執行緒去計算返回值,而當前執行緒在使用這個返回值之前可以做其它的操作,等到需要這個返回值時,再通過future得到,豈不美哉!這裡有乙個future模式的介紹:

下面來看另一種方式使用callable和future,通過executorservice的submit方法執行callable,並返回future,**如下:

public

class callableandfuture   

});  

try  catch (interruptedexception e)  catch (executionexception e)   

}  }  

**是不是簡化了很多,executorservice繼承自executor,它的目的是為我們管理thread物件,從而簡化併發程式設計,executor使我們無需顯示的去管理執行緒的生命週期,是jdk 5之後啟動任務的首選方式。

執行多個帶返回值的任務,並取得多個返回值,**如下:

public

class callableandfuture   

});  

}  // 可能做一些事情

for(int i = 1; i < 5; i++)  catch (interruptedexception e)  catch (executionexception e)   

}  }  

}        

其實也可以不使用completionservice,可以先建立乙個裝future型別的集合,用executor提交的任務返回值新增到集合中,最後便利集合取出資料,**略。       

Java執行緒 Callable和Future

public class callableandfuture futuretaskfuture new futuretask callable new thread future start try catch interruptedexception e catch executionexcept...

Java執行緒 Callable和Future

public class callableandfuture futuretaskfuture new futuretask callable new thread future start try catch interruptedexception e catch executionexcept...

java多執行緒之Callable

callable和runnbale一樣代表著是執行緒任務,區別在於callable有返回值並且可以丟擲異常。建立並啟動有返回值的執行緒的步驟如下 建立callable介面的實現類,並實現call 方法,該call 方法將作為執行緒執行體,並且該call 方法有返回值。將callable例項傳入fut...