Callable ではなく FutureTask を使用する利点は何ですか? 質問する

Callable ではなく FutureTask を使用する利点は何ですか? 質問する

結果の送信とポーリングタスクには2つのアプローチがあります

FutureTask futureTask = new FutureTask<String>(callable);
  1. Callableとの組み合わせを使用しFutureて に送信しますExecutorService。 を使用して結果を取得しますfuture.get()

    Future future = service.submit(callable);
    
  2. を使用しますFutureTask。これにより、 がラップされCallable、 を使用して結果が取得されますFutureTask

    service.execute(task);
    

FutureTaskover 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;
}

おすすめ記事