同步调用,异步回调和Future模式-创新互联

目标

通过与方法的同步调用,异步回调比较,理解 Future 模式

创新互联公司是一家集网站建设,太仆寺企业网站建设,太仆寺品牌网站建设,网站定制,太仆寺网站建设报价,网络营销,网络优化,太仆寺网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。

三者的不同

让我们先来明确一下同步与异步的不同。我们这里所说的同步和异步,仅局限在方法的同步调用和异步回调中。即,同步指的是调用一个方法,调用方要等待该方法所执行的任务完全执行完毕,然后控制权回到调用方;异步指的是调用一个方法,调用方不等该方法执行的任务完毕就返回,当任务执行完毕时会自动执行调用方传入的一块代码。

同步调用

void runTask {
  doTask1()
  doTask2()
}

同步调用,执行完 doTask1 在执行 doTask2

异步回调

doTask1(new Callback() {
  void call() {
    doTask3()
  }
});
doTask2();

异步回调,会先后执行 doTask1 和 doTask2, 在执行完 doTask1 后执行 doTask3

Future 模式

Future future = doTask1();
doTask2();
doTask3();
Result result = future.get();

我们可以看到,Future 模式中,一个任务的启动和获取结果分成了两部分,启动执行是异步的,调用后立马返回,调用者可以继续做其他的任务,而等到其他任务做完,再获取Future的结果,此时调用 get 时是同步的,也就是说如果 doTask1 如果还没有做完,等它做完。

适用情景

我们根据前面的例子可以看出,同步调用适合执行耗时短的任务。
异步回调适合执行耗时长的任务
Future 同样适合执行长的任务,它与回调的不同在于 get() 会阻塞等待,它的结果可能与调用后执行的任务有关系。比如,在烧水的过程中洗刷水壶,最后两者都完了才能泡茶。

Future模式的 Java 实现

Java 的并发库实现了 Future 模式,它定义了 Future 接口:

public interface Future {
    boolean cancel(boolean var1);

    boolean isCancelled();

    boolean isDone();

    V get() throws InterruptedException, ExecutionException;

    V get(long var1, TimeUnit var3) throws InterruptedException, ExecutionException, TimeoutException;
}

我们通过它取消任务的执行,判断是否取消和是否完成,获取结果。

Java 库还实现了一个 FutureTask, 它实现了 RunnableFuture(它继承了 Runnable 和 Future)。于是我们就可以用 Executor 来执行这个任务了。

FutureTask futureTask = new FutureTask<>(new Runnable() {
    @Override
    public void run() {

    }
}, "hello");
Executors.newSingleThreadExecutor().execute(futureTask);

... 其他任务

try {
    String result = futureTask.get();
} catch (InterruptedException e) {
    e.printStackTrace();
} catch (ExecutionException e) {
    e.printStackTrace();
}

总结

  1. 同步调用,调用方掌握控制权
  2. 异步回调,调用方放权,从而可以实现并行处理任务
  3. Future 模式,则是控制权和平行处理的折中

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


新闻标题:同步调用,异步回调和Future模式-创新互联
当前网址:http://hbruida.cn/article/dcpegc.html