iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >浅谈Java多线程处理中Future的妙用(附源码)
  • 261
分享到

浅谈Java多线程处理中Future的妙用(附源码)

java多线程ava 2023-05-31 01:05:17 261人浏览 泡泡鱼
摘要

java 中Future是一个未来对象,里面保存这线程处理结果,它像一个提货凭证,拿着它你可以随时去提取结果。在两种情况下,离开Future几乎很难办。一种情况是拆分订单,比如你的应用收到一个批量订单,此时如果要求最快的处理订单,那么需要并

java 中Future是一个未来对象,里面保存这线程处理结果,它像一个提货凭证,拿着它你可以随时去提取结果。在两种情况下,离开Future几乎很难办。一种情况是拆分订单,比如你的应用收到一个批量订单,此时如果要求最快的处理订单,那么需要并发处理,并发的结果如果收集,这个问题如果自己去编程将非常繁琐,此时可以使用CompletionService解决这个问题。CompletionService将Future收集到一个队列里,可以按结果处理完成的先后顺序进队。另外一种情况是,如果你需要并发去查询一些东西(比如爬虫),并发查询只要有一个结果返回,你就认为查询到了,并且结束查询,这时也需要用CompletionService和Future来解决。直接上代码更直观:

import java.util.ArrayList;import java.util.List;import java.util.Random;import java.util.concurrent.Callable;import java.util.concurrent.CompletionService;import java.util.concurrent.ExecutorCompletionService;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Future;public class CompletionServiceTest {  static int numThread =100;  static ExecutorService executor = Executors.newFixedThreadPool(numThread);  public static void main(String[] args) throws Exception{    //data表示批量任务    int[] data =new int[100];    for(int i=1;i<100000;i++){      int idx =i % 100;      data[idx] =i;      if(i%100==0){        testCompletionService(data);        data =new int[100];      }    }  }  private static void testCompletionService(int [] data) throws Exception{        CompletionService<Object> ecs = new ExecutorCompletionService<Object>(executor);    for(int i=0;i<data.length;i++){      final Integer t=data[i];      ecs.submit(new Callable<Object>() {        public Object call() {          try {            Thread.sleep(new Random().nextInt(1000));          } catch (InterruptedException e) {            e.printStackTrace();          }          return t;        }      });    }    //CompletionService会按处理完后顺序返回结果    List<Object> res =new ArrayList<Object>();    for(int i = 0;i<data.length;i++ ){      Future<Object> f = ecs.take();      res.add(f.get());    }           System.out.println(Thread.currentThread().getName()+":"+res);  }  private static void testBasicFuture(int [] data) throws Exception{       List<Future<Object>> res =new ArrayList<Future<Object>>();    for(int i=0;i<data.length;i++){      final Integer t=data[i];      Future<Object> future=executor.submit(new Callable<Object>() {        public Object call() {          return t;        }      });      res.add(future);    }       for(int i = 0;i<res.size();i++ ){      Future<Object> f = res.get(i);      Object rObject =f.get();      System.out.print(":"+rObject);    }           System.out.println("LN");  }}

--结束END--

本文标题: 浅谈Java多线程处理中Future的妙用(附源码)

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

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

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

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

下载Word文档
猜你喜欢
  • 浅谈Java多线程处理中Future的妙用(附源码)
    java 中Future是一个未来对象,里面保存这线程处理结果,它像一个提货凭证,拿着它你可以随时去提取结果。在两种情况下,离开Future几乎很难办。一种情况是拆分订单,比如你的应用收到一个批量订单,此时如果要求最快的处理订单,那么需要并...
    99+
    2023-05-31
    java 多线程 ava
  • 浅谈Java多线程的优点及代码示例
    尽管面临很多挑战,多线程有一些优点使得它一直被使用。这些优点是:资源利用率更好程序设计在某些情况下更简单程序响应更快资源利用率更好想象一下,一个应用程序需要从本地文件系统中读取和处理文件的情景。比方说,从磁盘读取一个文件需要5秒,处理一个文...
    99+
    2023-05-30
    java 多线程 ava
  • 浅谈Java编程中string的理解与运用
    一,“==”与equals()运行以下代码,如何解释其输出结果?public class StringPool { public static void main(String args[]) { String s0="Hello...
    99+
    2023-05-30
    java string ava
  • Java多线程中怎么利用Future实现携带结果的任务
    本篇文章为大家展示了Java多线程中怎么利用Future实现携带结果的任务,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Future 介绍Future表示异步计算的结果,它提供了检查计算是否完成的方...
    99+
    2023-06-22
  • Java中怎么利用多线程处理任务
    这篇文章将为大家详细讲解有关Java中怎么利用多线程处理任务,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1.直接传递一批任务给到多线程处理方法,返回处理结果代码如下: publi...
    99+
    2023-06-17
  • java利用Future实现多线程执行与结果聚合的代码怎么写
    java利用Future实现多线程执行与结果聚合的代码怎么写,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。场景网站智能问答场景,需要对多个分类查询,结果聚合展示由于每种分类...
    99+
    2023-06-22
  • Java 程序中的多线程原理及用法
    这篇文章主要讲解了“Java 程序中的多线程原理及用法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java 程序中的多线程原理及用法”吧!  为什么会排队等待?   下面的这个简单的 Ja...
    99+
    2023-06-03
  • JAVA多线程之中断机制及处理中断的方法
    目录一,介绍二,中断及如何响应中断?一,介绍 这篇文章主要记录使用 interrupt() 方法中断线程,以及如何对InterruptedException进行处理。感觉对Inter...
    99+
    2023-02-13
    java多线程中断机制 java多线程中断
  • PHP7中对多线程编程的支持:如何利用多核处理器提高代码的并发性?
    PHP7是一种高级的编程语言,已经为软件开发人员带来了许多令人兴奋的功能和性能提升。其中一个重要的改进是对多线程编程的支持。多线程编程允许开发人员在多个线程上同时执行代码,以利用多核处理器的优势,从而提高代码的并发性和执行效率。在本文中,我...
    99+
    2023-10-22
    PHP 多线程编程 关键词: 多核处理器
  • 怎么用python多线程处理循环中不同的元素数据
    你可以使用Python的threading模块来实现多线程处理循环中不同的元素数据。下面是一个示例代码: import thread...
    99+
    2023-10-24
    python
  • Java自然语言处理:同步函数在多线程环境下的应用探讨
    随着大数据时代的到来,自然语言处理(NLP)技术得到了广泛的应用。而在实际应用中,NLP技术需要处理大量的数据,因此多线程技术的应用也变得尤为重要。在多线程环境下,同步函数的应用可以帮助我们保证数据的正确性,提高程序的效率。本文将会讨论J...
    99+
    2023-10-29
    自然语言处理 同步 函数
  • 数组在大数据处理中的作用有多大?Java 大数据教程带你深入探究!
    随着大数据时代的到来,数据量的增长呈现出指数级别的增长趋势。在处理这些数据时,我们需要采用高效的算法和数据结构来提高数据的处理速度和效率。在这方面,数组作为一种基本的数据结构,具有重要的作用。 数组是一种有序的数据集合,它可以存储同类型的...
    99+
    2023-06-29
    大数据 教程 数组
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作