從計算中檢索值 - 可呼叫
如果你的計算產生一些後來需要的返回值,則一個簡單的 Runnable 任務是不夠的。對於這種情況,你可以使用 ExecutorService.submit(
Callable
<T>)
,它在執行完成後返回一個值。
服務將返回 Future
,你可以使用它來檢索任務執行的結果。
// Submit a callable for execution
ExecutorService pool = anExecutorService;
Future<Integer> future = pool.submit(new Callable<Integer>() {
@Override public Integer call() {
//do some computation
return new Random().nextInt();
}
});
// ... perform other tasks while future is executed in a different thread
當你需要獲得未來的結果時,請致電 future.get()
-
無限期等待將來結果。
try { // Blocks current thread until future is completed Integer result = future.get(); catch (InterruptedException || ExecutionException e) { // handle appropriately }
-
等待將來完成,但不要超過指定的時間。
try { // Blocks current thread for a maximum of 500 milliseconds. // If the future finishes before that, result is returned, // otherwise TimeoutException is thrown. Integer result = future.get(500, TimeUnit.MILLISECONDS); catch (InterruptedException || ExecutionException || TimeoutException e) { // handle appropriately }
如果不再需要計劃或執行任務的結果,你可以呼叫 Future.cancel(boolean)
取消它。
- 呼叫
cancel(false)
只會從要執行的任務佇列中刪除任務。 - 呼叫
cancel(true)
會也中斷的任務,如果它當前正在執行。