前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布

Future

作者头像
小忽悠
发布2019-02-25 17:08:17
4800
发布2019-02-25 17:08:17
举报
文章被收录于专栏:JAVA同学会JAVA同学会

一、简介

  通常情况下,我们在写多线程任务时,都是实现run方法,大家注意到run方法是没有返回值的。如果我们要用到其他线程的返回值该怎么办呢?

  这里就要用到Future了。

  Future是通过Callable实现的,是一种可生成结果的Runnable。当运行完成以后,可以通过Future.get获取结果。

  Future.get取决于任务的状态,如果任务没有完成,则get方法一直阻塞,直到任务完成。

  下面来看具体的实例

二、实例

代码语言:javascript
复制
public class Ha {
    public static void main(String[] args) throws InterruptedException, ExecutionException {
        Callable<String> callable = () -> {
            System.out.println("分线程正在进行");
            Thread.sleep(10*1000);
            System.out.println("分线程结束");
            return "分线程完成";
        };
        ExecutorService es = Executors.newSingleThreadExecutor();
        Future<String> future = es.submit(callable);
        es.shutdown();
        System.out.println("主线程工作正在进行");
        Thread.sleep(5*1000);
        System.out.println("主线程工作结束");
        String result = future.get();
        System.out.println(result);

    }
}

  首先,我们实现Callable,模拟一个工作任务,执行时间是10秒。

  通过Executors创建一个单线程任务,并执行Callable。

  主线程继续自己的工作,工作时间是5秒。

  主线程获取分线程的任务结果,由于分线程任务是10秒,所以get方法会阻塞,直到分线程任务完成。

  最后打印分线程任务结果。

  执行结果如下:

代码语言:javascript
复制
主线程工作正在进行
分线程正在进行
主线程工作结束
分线程结束
分线程完成

 上面的例子中,使用了lambda表达式,如果要运行,请使用jdk8。

博主原创,转载请联系博主

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-09-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档