iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Java中多线程对运行结果怎么利用future获取
  • 947
分享到

Java中多线程对运行结果怎么利用future获取

java多线程future 2023-05-31 01:05:39 947人浏览 独家记忆
摘要

Java中多线程对运行结果怎么利用future获取?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Future接口是Java标准api的一部分,在java.util.conc

Java中多线程对运行结果怎么利用future获取?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

Future接口是Java标准api的一部分,在java.util.concurrent包中。Future接口是Java线程Future模式的实现,可以来进行异步计算。

有了Future就可以进行三段式的编程了,1.启动多线程任务2.处理其他事3.收集多线程任务结果。从而实现了非阻塞的任务调用。在途中遇到一个问题,那就是虽然能异步获取结果,但是Future的结果需要通过isdone来判断是否有结果,或者使用get()函数来阻塞式获取执行结果。这样就不能实时跟踪其他线程的结果状态了,所以直接使用get还是要慎用,最好配合isdone来使用。

这里有一种更好的方式来实现对任意一个线程运行完成后的结果都能及时获取的办法:使用CompletionService,它内部添加了阻塞队列,从而获取future中的值,然后根据返回值做对应的处理。一般future使用和CompletionService使用的两个测试案例如下:

import java.util.ArrayList;import java.util.List;import java.util.Random;import java.util.concurrent.Callable;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Future;public class AsyncThread {  public static void main(String[] args) {    AsyncThread t = new AsyncThread();    List<Future<String>> futureList = new ArrayList<Future<String>>();    t.generate(3, futureList);    t.doOtherThings();    t.getResult(futureList);  }    public void generate(int threadNum, List<Future<String>> fList) {    ExecutorService service = Executors.newFixedThreadPool(threadNum);    for (int i = 0; i < threadNum; i++) {      Future<String> f = service.submit(getJob(i));      fList.add(f);    }    service.shutdown();  }    public void doOtherThings() {    try {      for (int i = 0; i < 3; i++) {        System.out.println("do thing no:" + i);        Thread.sleep(1000 * (new Random().nextInt(10)));      }    } catch (InterruptedException e) {      e.printStackTrace();    }  }    public void getResult(List<Future<String>> fList) {    ExecutorService service = Executors.newSingleThreadExecutor();    service.execute(getCollectJob(fList));    service.shutdown();  }    public Callable<String> getJob(final int i) {    final int time = new Random().nextInt(10);    return new Callable<String>() {      @Override      public String call() throws Exception {        Thread.sleep(1000 * time);        return "thread-" + i;      }    };  }    public Runnable getCollectJob(final List<Future<String>> fList) {    return new Runnable() {      public void run() {        for (Future<String> future : fList) {          try {            while (true) {              if (future.isDone() && !future.isCancelled()) {                System.out.println("Future:" + future                    + ",Result:" + future.get());                break;              } else {                Thread.sleep(1000);              }            }          } catch (Exception e) {            e.printStackTrace();          }        }      }    };  }}

--结束END--

本文标题: Java中多线程对运行结果怎么利用future获取

本文链接: https://www.lsjlt.com/news/222613.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java中多线程对运行结果怎么利用future获取
    Java中多线程对运行结果怎么利用future获取?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Future接口是Java标准API的一部分,在java.util.conc...
    99+
    2023-05-31
    java 多线程 future
  • 怎么在java中利用Future获取线程结果
    怎么在java中利用Future获取线程结果?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。java基本数据类型有哪些Java的基本数据类型分为:1、整数类型,用来表示整数的数据...
    99+
    2023-06-14
  • Java多线程中怎么利用Future实现携带结果的任务
    本篇文章为大家展示了Java多线程中怎么利用Future实现携带结果的任务,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Future 介绍Future表示异步计算的结果,它提供了检查计算是否完成的方...
    99+
    2023-06-22
  • Java多线程Future松获取异步任务结果轻松实现
    目录前言Runnable的局限性练手小Demo -- 回顾既往文章知识复习:优化为使用Runnable为异步而生的Future类图FutureTask详解构造函数生命周期核心方法如何...
    99+
    2023-05-15
    Java Future异步任务结果获取 Java Future多线程
  • java利用Future实现多线程执行与结果聚合的代码怎么写
    java利用Future实现多线程执行与结果聚合的代码怎么写,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。场景网站智能问答场景,需要对多个分类查询,结果聚合展示由于每种分类...
    99+
    2023-06-22
  • 怎么使用Java多线程Future获取异步任务
    本篇内容主要讲解“怎么使用Java多线程Future获取异步任务”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用Java多线程Future获取异步任务”吧!Runnable的局限性在前文中...
    99+
    2023-07-05
  • java利用Future实现多线程执行与结果聚合实例代码
    目录场景解决总结场景 网站智能问答场景,需要对多个分类查询,结果聚合展示 由于每种分类都有自己的业务逻辑,有的需要查询数据库中间库,有的需要查询elasticsearch搜索引擎,有...
    99+
    2024-04-02
  • Java多线程教程之如何利用Future实现携带结果的任务
    目录Future 介绍RunnableCallableFuture总结Future 介绍 Future表示异步计算的结果,它提供了检查计算是否完成的方法,以等待计算的完成,并检索计算...
    99+
    2024-04-02
  • Java多线程中Future设计模式怎么用
    这篇文章将为大家详细讲解有关Java多线程中Future设计模式怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Future -> 代表的是未来的一个凭据public interfac...
    99+
    2023-06-25
  • Java的Future多线程模式怎么使用
    本篇内容介绍了“Java的Future多线程模式怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在Java5后,提供了大量处理多线程的...
    99+
    2023-06-17
  • 怎么在java中利用多线程执行多个程序
    这期内容当中小编将会给大家带来有关怎么在java中利用多线程执行多个程序,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。常用的java框架有哪些1.SpringMVC,Spring Web MVC是一种基于...
    99+
    2023-06-14
  • Java多线程提交按照时间顺序获取线程结果详解流程
    Maven依赖 其实要不要无所谓。主要是为了方便。 <dependency> <groupId>cn.hutool...
    99+
    2024-04-02
  • 如何在PHP中调用Python并获取运行结果
    目录前言思路代码效果补充tf.app.run前言 在毕设中需要用到PHP传递参数调用Python脚本并获取后者返回的结果,经过查阅资料该问题得以解决。 思路 PHP借助shell_e...
    99+
    2024-04-02
  • 利用activity怎么对rootView 进行获取
    利用activity怎么对rootView 进行获取?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。实例如下:View rootView = ((ViewGroup)getWin...
    99+
    2023-05-31
    activity rootview
  • 怎么在java中利用反射获取对象
    本篇文章为大家展示了怎么在java中利用反射获取对象,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Java可以用来干什么Java主要应用于:1. web开发;2. Android开发;3. 客户端开...
    99+
    2023-06-14
  • c++中一个对象怎么运行多个线程
    在C++中,一个对象可以通过创建多个线程来同时执行多个任务。为了实现这一点,你可以使用C++的多线程库,例如std::thread或...
    99+
    2024-02-29
    c++
  • 使用多线程执行任务,并获取返回结果,附异步实现
    1 获取又返回结果的 需要用到 callable接口 public class TestTask implements Callable { @Override public Studen...
    99+
    2023-09-01
    java jvm servlet
  • 怎么在python中利用多进程取代多线程
    怎么在python中利用多进程取代多线程?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。python是什么意思Python是一种跨平台的、具有解释性、编译性、互动...
    99+
    2023-06-14
  • 怎么用shell获取sql执行的结果
    你可以使用shell脚本来执行SQL查询,并将结果保存到变量中。下面是一个示例: #!/bin/bash # 运行SQL查询 re...
    99+
    2023-10-24
    shell sql
  • 怎么在Java中对多线程进行排序
    怎么在Java中对多线程进行排序?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Java的特点有哪些Java的特点有哪些1.Java语言作为静态面向对象编程语言的代表,实现了面向...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作