Future模式
发布日期:2021-05-14 12:39:04 浏览次数:20 分类:精选文章

本文共 2349 字,大约阅读时间需要 7 分钟。

一、什么是Future模式?

Future模式是一种并发编程模式,核心思想是通过已完成任务的方式,去除主函数的等待时间。想象一下,你在饭店等上菜的时候,如果将这段等待时间用于阅读、写作,或者与周围人交流,那么这段时间就不再是“等待”的简单耗时,而是充分利用了时间的 bleach time(空闲时间)。就像并行下载多个文件一样,多个任务在同一时间段内多线程执行,从而提高整体效率。

Future模式的工作原理其实类似于异步编程。在单线程环境下,如果有多个任务需要同时执行,我们可以通过将这些任务分别提交执行,并通过Future对象关联这些并行执行的任务。当某个任务完成时,Future对象会立即通知我们,可以根据需要进行处理。这种方式一方面避免了多线程中的死锁问题(_deadlock),另一方面充分利用了 CPU 的 idle time(空闲时间),提升了资源利用率。

三、Future模式的核心优势

  • 异步化处理:通过Future模式,我们可以像处理同步函数一样处理异步返回的任务。这种看似复杂的非线性控制结构,最终可以变成简洁的同步代码。

  • 代码简化:类似于 Deferred 模式,Future允许我们通过简单的 Future.get() 或 Future.isDone() 来处理多个依赖任务,从而简化了代码的叠加式编程。

  • Resource optimization:通过并行执行多个任务,充分利用 CPU 的空闲时间,可以显著提升整体工作效率。在假设两位执行时间分别为5秒和6秒的任务,那么采用普通模式需要11秒才能完成。而通过Future实现,整体完成时间仅仅为6秒。

  • 四、代码示例

    以下是Future模式的典型使用方法:

    package com;

    import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.concurrent.*;/**

      • {Desc} */

    public class ThreadCallable { public static void main(String[] args) throws InterruptedException, ExecutionException { List task = new ArrayList(); // 创建不定长线程池 ExecutorService executorService = Executors.newCachedThreadPool();

    // 第一任务:5秒延迟
    executorService.submit(new Callable() {
    public Object call() throws Exception {
    System.out.println("延时5秒开始");
    Thread.sleep(5000);
    System.out.println("延时5秒结束");
    return "5秒执行完啦!!!";
    }
    });
    // 第二任务:6秒延迟
    task.add(executorService.submit(new Callable() {
    public Object call() throws Exception {
    System.out.println("延时6秒开始");
    Thread.sleep(6000);
    System.out.println("延时6秒结束");
    return "6秒执行完啦!!!";
    }
    }));
    int index = 1;
    // 获取所有以Futrue形式执行的任务结果
    for (Future item : task) {
    Object o = item.get(); // 等待任务完成,获取返回值
    System.out.println("我是第" + index + "个任务返回的结果:" + o);
    index++;
    }
    // 关闭线程池
    executorService.shutdown();
    System.out.println("执行时长:" + (System.currentTimeMillis() - l) / 1000 + "秒");

    }

    在这段代码中:

    l 表示初始时间(即0秒),执行完毕的结果显示我们只需等待6秒即可完成所有任务(一个5秒,一个6秒),而 barebone模式 下则需要11秒。这样通过 Future 模式,我们将线程空闲时间充分利用,使总体效率提升到原来的1.8倍左右。

    五、图示对比

    下面是一张简要对比图的内容:

    • 左侧为传统模式,主线程在等待任务1和任务2完成,需要累计11秒;
    • 右侧为Future模式下的实现,主线程提交任务后立即返回,剩下的等待时间用于其他操作,完成时间仅为6秒。

    通过 Future 模式,我们不 Only 伊rons.tasks.can Nap at 会争夺主线程的等待时间,从而在其他不会任务中获得 performance gain(性能提升)。这种设计理念在分布式系统中尤为重要,有助于充分利用网络带宽和系统资源。

    六、总结性语句

    Future 模式是一种观念概念,不直接改变代码本身,而是通过重要性地改变思维方式。它的核心在于转移到任务执行的本源逻辑上,而不是为了协议的执行,而是基于协议结果。通过这样的设计,可以更好地抵御代码执行时间的不确定性。

    上一篇:idea每次创建项目JDK版本都是1.5的解决方法
    下一篇:JAVA队列( Queue ) 详解

    发表评论

    最新留言

    感谢大佬
    [***.8.128.20]2025年04月18日 21时28分35秒