DBMNG数据库管理与应用

书籍是全世界的营养品。生活里没有书籍,就好像没有阳光;智慧里没有书籍,就好像鸟儿没有翅膀。
当前位置:首页 > 经验分享 > Java开发

java并发学习与实践——FutrueTask的使用示例

并发模式中,有一个称做Future模式。啥是Future模式捏? future,翻译成中文就是“未来,将来”的意思,可以简单地理解为 “明天的事明天再做” 。
比方说,你在做晚饭,而只有一个火炉,先炖个猪蹄要1小时,在等待猪蹄的这个时间里,你可以去淘米、洗菜、刷牙、抠脚,待猪蹄炖好了,再继续炒菜。
在编码中体现为:将耗时任务丢入单独的线程,从而使主线程能够继续执行其它的逻辑,待耗时任务执行完成后再做相应的处理。
Future模式是一钟十分常用的并发模式,所以JDK的并发包中自带一套实现。上类图:



这个自己画的,既然画了不能白画,囧!!!

下面这个是用 IntelliJ IDEA 自带工具生成的,真心太酸爽。


只看函数名称,也能基本了解FutureTask所提供的主要能力:
1、可判断执行状态(isDone())
2、可取消(cancel())
3、可读取返回结果(get())
4、可判断是否取消(isCancelled)
现在,我们可以解决上面这个猪脚的问题了:

    public static class TestTask implements Callable<Boolean> {
        @Override
        public Boolean call() throws Exception {
            //模拟时间消耗
            System.out.println("--------漫长的一小时--------");
            Thread.sleep(10000);
            System.out.println("--------猪脚炖完--------");
            return true;
        }
    }

    public static void main(String[] args) throws ExecutionException, InterruptedException {

        System.out.println("--------开始做晚饭--------");
        System.out.println("开始炖猪脚~~~");
        System.out.println("--------猪脚下锅--------");
        FutureTask<Boolean> futureTask = new FutureTask<Boolean>(new TestTask());
        Thread thread = new Thread(futureTask);
        thread.start();
        Thread.sleep(1000);
        System.out.println("--------淘米--------");
        Thread.sleep(1000);
        System.out.println("--------洗菜--------");
        Thread.sleep(1000);
        System.out.println("--------刷牙--------");
        Thread.sleep(1000);
        System.out.println("--------抠脚--------");
        //如果猪脚炖好了
        if(futureTask.get()==true){
            System.out.println("--------继续炒菜--------");
        }
    }
执行结果:
--------开始做晚饭--------
开始炖猪脚~~~
--------猪脚下锅--------
--------漫长的一小时--------
--------淘米--------
--------洗菜--------
--------刷牙--------
--------抠脚--------
--------猪脚炖完--------
--------继续炒菜--------

本站文章内容,部分来自于互联网,若侵犯了您的权益,请致邮件chuanghui423#sohu.com(请将#换为@)联系,我们会尽快核实后删除。
Copyright © 2006-2023 DBMNG.COM All Rights Reserved. Powered by DEVSOARTECH            豫ICP备11002312号-2

豫公网安备 41010502002439号