Future模式

目录

1.作用

2.Java中Future模式的实现

3.Future接口的主要实现类

1.FutureTask

2.CompletableFuture


1.作用

        在执行耗时较长任务的场景下,通过Future模式能够进行异步调用:即将该耗时任务通过子线程异步执行,而主程序执行其他任务,当子线程执行完成,通过Future模式获取该耗时任务的执行结果,提高执行效率

2.Java中Future模式的实现

        定义了一个Future接口

public interface Future {

    /**
     *尝试取消执行此任务
     */
    boolean cancel(boolean mayInterruptIfRunning);

    /**
     * 如果此任务在正常完成之前被取消,则返回true
     */
    boolean isCancelled();

    /**
     * 如果此任务已完成,则返回true
     */
    boolean isDone();

    /**
     * 如果需要,等待计算完成,然后检索其结果
     */
    V get() throws InterruptedException, ExecutionException;

    /**
     *如果需要,最多等待给定的时间以完成计算,然后检索其结果(如果可用)
     */
    V get(long timeout, TimeUnit unit)
        throws InterruptedException, ExecutionException, TimeoutException;
}

该接口的功能总结:

        获取Future执行任务后的执行结果;

        取消Future执行的任务

        查看Future执行任务的状态(任务是否执行完毕)

3.Future接口的主要实现类

1.FutureTask

是Future接口的基本实现类,实现了接口功能的三个方法:

        取消任务:

  public boolean cancel(boolean mayInterruptIfRunning) {
        if (!(state == NEW &&
              UNSAFE.compareAndSwapInt(this, stateOffset, NEW,
                  mayInterruptIfRunning ? INTERRUPTING : CANCELLED)))
            return false;
        try {    // in case call to interrupt throws exception
            if (mayInterruptIfRunning) {
                try {
                    Thread t = runner;
                    if (t != null)
                        t.interrupt();
                } finally { // final state
                    UNSAFE.putOrderedInt(this, stateOffset, INTERRUPTED);
                }
            }
        } finally {
            finishCompletion();
        }
        return true;
    }

        查看任务执行状态:实现了Runable接口,从而能够将任务直接执行

        获取任务执行结果:构造器中传入了Callable接口对象,能够存储call()方法的执行结果并返回

2.CompletableFuture

定义:实现了Future和CompletionStage接口

public class CompletableFuture implements Future, CompletionStage {
}

作用:jdk1.8后引入的实现类,能够将多个异步任务串联形成复合调用:CompletionStage使得CompletableFuture能够将多个异步任务组合构形成异步调用

你可能感兴趣的:(java,前端,算法)