`
云上太阳
  • 浏览: 128333 次
  • 性别: 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编程模式

    主要介绍了Java的Future编程模式,包括对异步和并发的一些设计思维,需要的朋友可以参考下

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

    主要介绍了Java使用Callable和Future创建线程操作,结合实例形式分析了java使用Callable接口和Future类创建线程的相关操作技巧与注意事项,需要的朋友可以参考下

    java Future 接口使用方法详解

    主要介绍了java Future 接口使用方法详解,Future接口是Java线程Future模式的实现,可以来进行异步计算的相关资料,需要的朋友可以参考下

    java并发包之Callable和Future

    java并发包之Callable和Future java并发包之Callable和Future java并发包之Callable和Future java并发包之Callable和Future java并发包之Callable和Future java并发包之Callable和Future

    Java的Future使用方法

    首先,Future是一个接口,该接口用来返回异步的结果。 ... import java.util.ArrayList; import java.util.concurrent.Callable; import java.util.concurrent.... import java.util.concurrent.Future

    future模式案例代码

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

    Java中Future、FutureTask原理以及与线程池的搭配使用

    主要为大家详细介绍了Java中Future、FutureTask原理以及与线程池的搭配使用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    Java程序执行超时——Future接口介绍

    Java程序执行超时——Future接口介绍

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

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

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

    在本篇文章里我们给大家分享了java中Future与FutureTask之间的关系的内容,有需要的朋友们可以跟着学习下。

    java多线程设计模式 (PDF中文版, 附源码)

    第9章 Future——先给您这张提货单 第10章 Two-Phase Termination——快把玩具收拾好,去睡觉吧 第11章 Thread-Specific Storage——每个线程的保管箱 第12章 Active Object——接受异步消息的主动对象 总结 多线程...

    JAVA设计模式

    里面有JAVA 设计模式 工厂模式 单例模式 观察者模式 装饰者模式以及future 和生产消费模式的实例 详细讲解请查看我的博客:http://my.csdn.net/ajun495175289

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

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

    线程超时死掉

    Future接口是Java线程Future模式的实 现,可以来进行异步计算。 Future模式可以这样来描述:我有一个任务,提交给了Future,Future替我完成这个任务。期间我自己可以去做任何想做的事情。一段时 间之后,我就便...

    java Callable与Future的详解及实例

    主要介绍了java Callable与Future的详解及实例的相关资料,需要的朋友可以参考下

    了解JAVA Future类

    Future是并发编程中的一种设计模式,Future它代表一个异步计算的结果,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,下面小编和大家来一起学习一下吧

    Java利用future及时获取多线程运行结果

    在Java编程中,有时候会需要及时获取线程的运行结果,本文就通过一个相关实例向大家介绍Java利用future及时获取线程运行结果的方法,需要的朋友可以参考。

    Actor模式的Java实现JActor.zip

    JActor 是一个 Java 的 Actor 模式的实现,经过测试在 i5 CPU 上可支持每秒钟发送超过亿条消息,可能是目前最快的。这相当于是 Scala 的 Actor 的纯 Java 版本。 示例代码: // Create a mailbox factory with a ...

    Java中的Runnable,Callable,Future,FutureTask的比较

    主要介绍了Java中的Runnable,Callable,Future,FutureTask的比较的相关资料,需要的朋友可以参考下

Global site tag (gtag.js) - Google Analytics