[英]What does 'result' in ExecutorService.submit(Runnable task, T result) do?
看看javadocs,它只是說
<T> Future<T> submit(Runnable task, T result)
提交Runnable任務以執行並返回表示該任務的Future。 Future的get方法將在成功完成后返回給定的結果。
參數:
任務 - 要提交的任務
結果 - 返回的結果
但它對結果有什么影響? 它存儲了什么嗎? 它只是使用結果類型來指定Future<T>
的類型嗎?
它對結果沒有任何作用 - 只是持有它。 任務成功完成后,調用future.get()
將返回您傳入的結果。
以下是Executors $ RunnableAdapter的源代碼,它顯示在任務運行后,返回原始結果:
static final class RunnableAdapter<T> implements Callable<T> {
final Runnable task;
final T result;
RunnableAdapter(Runnable task, T result) {
this.task = task;
this.result = result;
}
public T call() {
task.run();
return result;
}
}
是的,結果的泛型類型應該與返回的Future的類型相匹配。
Runnable不返回任何內容,Future必須返回一些內容,因此此方法允許您預定義返回的未來的結果。
如果你不想返回一個東西,你可以返回null,我認為Void
類型存在來表達那種東西。
Future<Void> myFuture = executor.submit(myTask, null);
你知道myFuture.get()
在這種情況下會返回null
,但只有在任務運行之后才會返回null
,所以你會用它來等待並拋出任務中拋出的任何異常。
try {
myFuture.get();
// After task is executed successfully
...
} catch (ExecutionException e) {
Throwable c = e.getCause();
log.error("Something happened running task", c);
// After task is aborted by exception
...
}
您可以改變在任務期間傳入的對象。 例如:
final String[] mutable = new String[1];
Runnable r = new Runnable() {
public void run() {
mutable[0] = "howdy";
}
};
Future<String[]> f = executorService.submit(r, mutable);
String[] result = f.get();
System.out.println("result[0]: " + result[0]);
當我運行此代碼時,它輸出:
result[0]: howdy
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.