ホームページ  >  記事  >  Java  >  java-concurrency-Callable、Future、FutureTask

java-concurrency-Callable、Future、FutureTask

黄舟
黄舟オリジナル
2017-01-19 11:56:261510ブラウズ

スレッドを作成するには 2 つの方法があり、1 つは Thread を直接継承する方法、もう 1 つは Runnable インターフェースを実装する方法です

違い: インターフェースは多重継承を実装できます

欠点は、 task

Callable and Runnable

java.lang.Runnable

[code]public interface Runnable {
    public abstract void run();
}

run()メソッドの戻り値はvoid型のため、タスク実行後に結果は返されません。

java.util.concurren

[code]public interface Callable<V> {
    /**
     * Computes a result, or throws an exception if unable to do so.
     *
     * @return computed result
     * @throws Exception if unable to compute a result
     */
    V call() throws Exception;
}

汎用インターフェース、call() 関数によって返される型は、

で渡される V 型です。一般に、ExecutorService と組み合わせて使用​​され、いくつかの submit メソッドが ExecutorService インターフェースで宣言されますオーバーロード版

[code]<T> Future<T> submit(Callable<T> task);
<T> Future<T> submit(Runnable task, T result);
Future<?> submit(Runnable task);

Future

Futureは、特定のRunnableまたはCallableタスクの実行結果をキャンセルし、完了したかどうかをクエリし、結果を取得します。必要に応じて、タスクが結果を返すまで、このメソッドはブロックされます。タスクのキャンセルが成功した場合、このメソッドは true を返します。キャンセルが失敗すると false が返されます。 MayInterruptIfRunning パラメータは、実行中だが完了していないタスクをキャンセルできるかどうかを示します。 true に設定すると、実行中のタスクをキャンセルできることを意味します。タスクが完了した場合、mayInterruptIfRunning が true か false に関係なく、このメソッドは必ず false を返します。つまり、完了したタスクがキャンセルされた場合、タスクが実行中であり、mayInterruptIfRunning が true に設定されている場合は false を返します。 MayInterruptIfRunning が false に設定されている場合は true を返し、タスクが実行されていない場合は false を返します。mayInterruptIfRunning が true であっても false であっても、必ず true を返します。

isCancelled メソッドはタスクが正常にキャンセルされたかどうかを示し、タスクが正常に完了する前にタスクがキャンセルされた場合は true を返します。

isDone メソッドはタスクが完了したかどうかを示し、タスクが完了した場合は true を返します。このメソッドは実行結果を取得するために使用されます。このメソッドはタスクが完了するまで戻りません。 ;

get(long timeout, TimeUnit単位)は、指定時間内に結果が得られなかった場合は直接nullを返します。

つまり、Future は 3 つの機能を提供します:

1) タスクが完了したかどうかを判断する機能

2) タスクを中断する機能

3) タスクの実行結果を取得する機能。

Futureは単なるインターフェースなので、直接オブジェクトの作成に使用することはできませんので、次のFutureTaskがあります。

FutureTask

[code]public interface Future<V> {
    boolean cancel(boolean mayInterruptIfRunning);
    boolean isCancelled();
    boolean isDone();
    V get() throws InterruptedException, ExecutionException;
    V get(long timeout, TimeUnit unit)
        throws InterruptedException, ExecutionException, TimeoutException;
}
[code]public class FutureTask<V> implements RunnableFuture<V>
rree
実際、FutureTask は Future インターフェイスの唯一の実装クラスです。

[code]public interface RunnableFuture<V> extends Runnable, Future<V> {
    void run();
}
[code]public FutureTask(Callable<V> callable) {
}
public FutureTask(Runnable runnable, V result) {
}

キャンセル可能性のためにFutureを使用しているが、使用可能な結果が提供されない場合は、Futureを宣言できます

上記は、java-concurrency-Callable、Future、およびFutureTaskの内容です。その他の関連内容については、注意してください。 PHP 中国語 Web サイト (www.php.cn) へ!

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。