同時学習計画-EXecutor、ExecutorServiceとFutureの関係01

3169 ワード

まず、Executor、ExecutorService、Futureの3つのクラスは、次のようにインタフェースです.
public interface Executor
public interface ExecutorService extends Executor
public interface Future

ExecutorServiceがExecutorを継承しているのを見ることができますが、この3つのものは何ですか.ソースコードを見てみましょう.(インタフェースのソースコードは何が面白いですか)
public interface Executor {
    void execute(Runnable command);
}

Executorは実行方法についてRunnableを入力し、このRunnableを実行するのは明らかです.
Executorクラスはどんな感じで、タスクを実行しますか.
このインタフェースは私たちにも書けるでしょう.
それからFutureを見てみましょう.Futureは直接汎型を伝えなければなりませんが、この汎型が何をするのか分かりません.ソースコードを見てみましょう.
public interface Future {

    boolean cancel(boolean mayInterruptIfRunning);

    boolean isCancelled();

    boolean isDone();

    V get() throws InterruptedException, ExecutionException;

    V get(long timeout, TimeUnit unit)
        throws InterruptedException, ExecutionException, TimeoutException;
}

だからこれらのソースコードは何のように見えますか?Executerインタフェースの方法に基づいて、execute方法が何をしているのか推測することができますが、Futureのインタフェースの方法だけを見て、私はこれらの方法が何をしているのか全然分かりません.
やはり注釈を見ましょう.
cancelメソッドは、このタスクをキャンセルすることを表し、パラメータは、このタスクが中断できるかどうかを表します.
isCancelledはbooleanに戻って中断されたかどうかを示します
isDoneはメソッドの実行が完了したことを示します
getタスク実行の結果の取得
get(パラメータ付き)代表メソッドは所定の時間に結果を返さなければならないが,このメソッドは異常に多くてたまらないので,このメソッドの要求が高いことがわかる.
Futureというクラスはどんな感じですか.このクラスは実行結果を得るために、あるいはタスクを中断するためです.
次に、多くのExecutorServiceを見てみましょう.
public interface ExecutorService extends Executor {

    void shutdown();

    List shutdownNow();

    boolean isShutdown();

    boolean isTerminated();

    boolean awaitTermination(long timeout, TimeUnit unit)
        throws InterruptedException;

     Future submit(Callable task);

     Future submit(Runnable task, T result);

    Future> submit(Runnable task);

     List> invokeAll(Collection extends Callable> tasks)
        throws InterruptedException;

     List> invokeAll(Collection extends Callable> tasks,
                                  long timeout, TimeUnit unit)
        throws InterruptedException;

     T invokeAny(Collection extends Callable> tasks)
        throws InterruptedException, ExecutionException;

     T invokeAny(Collection extends Callable> tasks,
                    long timeout, TimeUnit unit)
        throws InterruptedException, ExecutionException, TimeoutException;
}

ソースをスキップしてここを見たの?それらのソースコードを見たくないのは正しいです.私を放しても見たくありません.めちゃくちゃに見ていて、何を見たらいいか分かりません.
これらの方法を異なるタイプに分けましょう.
shutdown、Terminated、submit、invoke
これらの方法は大体この4つのスタイルです.shutdown代表クローズタスクTerminated代表中断タスクsubmit提供runnable実行タスクinvoke実行するタスクの準備ができている
はっきり見えるかどうか.
Executorクラスはタスクを実行するため、ExecutorServiceもタスクを実行するためのようです.
しかし、ExecutorServiceが管理しなければならないことはたくさんあるようです.
中断したり、閉じたり、runnableを提供してそれらのタスクを実行したりします.
だからこの3つのクラスの関係はどのような関係なのでしょうか.
ExecutorServiceはExecutorを継承するので、言うまでもなく、すべてタスクを実行するためです.
ExecutorServiceはタスクを実行しますが、Futureはタスク実行の結果です.多分この関係です.
over!