Future模式

Future模式用于异步执行耗时任务,提高效率。Java提供了Future接口,主要实现类有FutureTask和CompletableFuture。FutureTask实现了Runnable,允许直接执行任务并存储结果。CompletableFuture则是jdk1.8后引入的,支持更复杂的异步任务组合。
摘要由CSDN通过智能技术生成

目录

1.作用

2.Java中Future模式的实现

3.Future接口的主要实现类

1.FutureTask

2.CompletableFuture


1.作用

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

2.Java中Future模式的实现

        定义了一个Future接口

public interface Future<V> {

    /**
     *尝试取消执行此任务
     */
    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<T> implements Future<T>, CompletionStage<T> {
}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值