結果の送信とポーリングタスクには2つのアプローチがあります
FutureTask futureTask = new FutureTask<String>(callable);
Callable
との組み合わせを使用しFuture
て に送信しますExecutorService
。 を使用して結果を取得しますfuture.get()
。Future future = service.submit(callable);
を使用します
FutureTask
。これにより、 がラップされCallable
、 を使用して結果が取得されますFutureTask
。service.execute(task);
FutureTask
over Callable
+ Future の組み合わせを使用する利点は何ですか?
ベストアンサー1
ほぼ間違いなく、まったくありません。GrepコードショーのAbstractExecutorService
これらの各メソッドは、単にCallable
/を最終的Runnable
にラップするヘルパー メソッドですFuture
。
protected <T> RunnableFuture<T> newTaskFor(Runnable runnable, T value) {
return new FutureTask<T>(runnable, value);
}
protected <T> RunnableFuture<T> newTaskFor(Callable<T> callable) {
return new FutureTask<T>(callable);
}
public Future<?> submit(Runnable task) {
// ...
RunnableFuture<Object> ftask = newTaskFor(task, null);
execute(ftask);
return ftask;
}
public <T> Future<T> submit(Runnable task, T result) {
// ...
RunnableFuture<T> ftask = newTaskFor(task, result);
execute(ftask);
return ftask;
}
public <T> Future<T> submit(Callable<T> task) {
// ...
RunnableFuture<T> ftask = newTaskFor(task);
execute(ftask);
return ftask;
}