`
云上太阳
  • 浏览: 131398 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java future模式举例

阅读更多

java future模式举例

                                                                                                        ——我一直不太信任自己的记忆力,所以我把它们都写下来

 

    

Future模式在java中简单使用
直接模拟场景,然后看实例,一直以来喜欢这种直接的方式:有两个比较耗时的计算过程,一个耗时5秒,一个耗时2秒,那我们怎么在5秒时得到计算结果?

先是普通的做法

 

public class ExeCutorTest {

    /**
     * @param args
     */
    public static void main(String[] args) {
        //计时开始
        Long beg = new Date().getTime();
        System.out.println("结果"+(calcA()+calcB()));
        //执行完成后话费的时间
        System.out.println("花费时间"+(new Date().getTime()-beg));
    }
   //耗时操作A需要2000毫秒
    public static int calcA(){
        int count = 50;
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return count;
    }
    //耗时操作B需要5000毫秒
    public static int calcB(){
        int count = 100;
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return count;
    }
}

运行控制台输出结果如下,如我们所料是7000毫秒也就是7秒;

结果150
花费时间7000

下面是使用Future模式的改良版

 

public class ExeCutorTest {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // 计时开始
        Long beg = new Date().getTime();

        FutureTask<Integer> task = new FutureTask<Integer>(
                new Callable<Integer>() {
                    @Override
                    public Integer call() throws Exception {
                        return calcB();
                    }
                });
        Thread t = new Thread(task);
        t.start();

        try {
            System.out.println("结果" + (calcA() + task.get()));
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
        // 执行完成后话费的时间
        System.out.println("花费时间" + (new Date().getTime() - beg));
    }

    // 耗时操作A需要2000毫秒
    public static int calcA() {
        int count = 50;
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return count;
    }

    // 耗时操作B需要5000毫秒
    public static int calcB() {
        int count = 100;
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return count;
    }
}


控制台打印输出的结果:

结果150
花费时间5005



版权声明:本文为博主原创文章,未经博主允许不得转载。

分享到:
评论

相关推荐

    老生常谈java中的Future模式

    老生常谈java中的Future模式 在 Java 中,Future 模式是一种常用的设计模式,用于处理并发编程中的多线程问题。在这个模式中,线程 A 需要等待线程 B 的结果,但线程 A 不需要一直等待线程 B,可以先拿到一个未来的...

    简单讲解Java的Future编程模式

    Java的Future编程模式是Java并发处理中的核心概念,主要用于处理异步计算的结果。在Java的`java.util.concurrent`包中,`Future`接口扮演着重要角色,它提供了一种方式来管理和检索由其他线程执行的异步任务的结果。...

    Java使用Callable和Future创建线程操作示例

    "Java使用Callable和Future创建线程操作示例" Java使用Callable和Future创建线程操作示例主要介绍了Java使用Callable和Future创建线程操作,结合实例形式分析了java使用Callable接口和Future类创建线程的相关操作...

    31 凭票取餐—Future模式详解.pdf

    在Java并发编程中,Future模式是一种常见的设计模式,它允许主线程在不阻塞的情况下启动一个异步任务,然后在需要时获取任务的结果。Future模式的灵感来源于现实生活中的场景,如本文开头提到的买午餐和牙膏的例子,...

    java 线程池与通过Future终止线程实例

    NULL 博文链接:https://waitingkkk-163-com.iteye.com/blog/2232286

    java设计模式以及并发编程大全

    Java设计模式和并发编程是Java开发中的两个重要领域,它们对于构建高效、可维护的软件系统至关重要。设计模式是经过时间验证的解决常见问题的最佳实践,而并发编程则是利用多核处理器的优势,提高应用程序的执行效率...

    java多线程设计模式详解(PDF及源码)

    通过程序范例和UML图示来一一解说,书中代码的重要部分加了标注以使读者更加容易理解,再加上图文并茂,对于初学者还是程序设计高手来说,这都是一本学习和认识JAVA设计模式的一本好书。(注意,本资源附带书中源...

    java与模式一书源代码

    《Java与模式》是一本深入探讨Java编程语言与设计模式结合的经典著作,旨在帮助开发者更好地理解和应用面向对象设计原则。源代码是书籍内容的重要组成部分,它提供了实际的示例,让读者可以动手实践,加深对书中理论...

    JAVA设计模式

    JAVA设计模式是软件开发中的一种重要思想,它总结了在解决特定问题时代码组织和重用的最佳实践。设计模式提供了一种通用的语言,使得开发者能够更有效地交流和复用已经验证过的解决方案。以下是对这些主要设计模式的...

    实战Java高并发程序设计模式高清视频教程.zip

    Java提供了多种并发工具和API,如ExecutorService、Future、Semaphore、CountDownLatch等,帮助开发者有效地管理和协调并发任务。 接着,我们将会学习到Java中的线程和进程概念。线程是程序执行的最小单元,而进程...

    Java多线程设计模式源代码

    在Java编程领域,多线程设计模式是一种至关重要的技术,特别是在构建高效、可扩展和并发的应用程序时。本文将深入探讨Java多线程设计模式及其源代码,旨在帮助开发者理解和应用这些模式,提升代码的并发性能和可维护...

    比较java中Future与FutureTask之间的关系

    在Java中,Future和FutureTask都是用于获取线程执行的返回结果,但是它们之间存在一些差异和关联。本文将详细介绍Future和FutureTask的关系、使用和分析。 一、Future介绍 Future位于java.util.concurrent包下,是...

    Java的Future使用方法

    Java中的`Future`接口是Java并发编程中一个重要的概念,它是`java.util.concurrent`包下的一个接口,主要用于处理异步计算的结果。`Future`接口提供了一些方法来检查任务是否完成,获取或取消任务的结果,以及在必要...

    了解JAVA Future类

    Java Future类是一种并发编程中的一种设计模式,Future它代表一个异步计算的结果。Future表示一个可能还没有完成的异步任务的结果,针对这个结果可以添加Callback以便在任务执行成功或失败后作出相应的操作。 在...

    java多线程设计模式详解.pdf

    3. 同步和通信模式:探讨在多线程程序中,线程间的同步机制和通信手段,如信号量、栅栏、Future模式等。 4. 并发集合和映射的设计模式:介绍在多线程环境中,如何安全地使用集合数据结构,以及专门针对并发访问设计...

    future模式案例代码

    Future模式核心思想是异步调用,这里具体实现代码,其思想是:网上订了一个货之后,他会立即返回下好订单给你,你可以去做其他事,不用再一直等这个货物到达,以后有时间,货物到了,你就可以拿这个订单,去取货。...

    java多线程设计模式详解

    Java的`Future`接口和`Callable`接口结合`ExecutorService`可以实现这一模式,提高程序的响应速度。 八、线程局部变量模式 线程局部变量(`ThreadLocal`)为每个线程提供独立的变量副本,避免了多线程环境下的数据...

    Java并发编程:设计原则与模式(第二版)-3

    《Java并发编程:设计原则与模式(第二版)》是一本深入探讨Java多线程编程技术的权威著作。这本书详细阐述了在Java平台中进行高效并发处理的关键概念、设计原则和实用模式。以下是对该书内容的一些核心知识点的概述...

    java 子线程通过观察者模式通知主线程

    在Java中,`java.util.Observable`类和`java.util.Observer`接口提供了对观察者模式的支持。 1. **`Observable`类**:代表被观察的对象,可以注册多个观察者,并在状态改变时通知它们。`Observable`类提供了`...

    java并发包之Callable和Future

    `Callable`和`Future`的组合是Java并发包中一个强大的工具,它弥补了`Runnable`接口的不足,使得异步编程可以获取到返回值并处理异常。同时,`ExecutorService`作为线程池的实现,为并发编程提供了一种优雅的解决...

Global site tag (gtag.js) - Google Analytics