首页 > 软件开发 > JAVA >

java快速理解和使用invokeall进行多线程编程

来源:互联网 2023-03-16 19:31:33 150

invokeall是在Java多线程变成之中,经常用来批量调用数据和批量返回数据,本篇文章将会帮助你快速理解和使用invokeall方法,希望读者在阅读之后可以学有所得。dcN办公区 - 实用经验教程分享!

工具/原料

  • eclipse
  • Java jdk 和多线程包

方法/步骤

  • 1

    第一点,很多人其实并不知道invokeall属于哪一种方法,这里我要做一个说明,invokeall方法属于java多线程框架Executor中的ExecutorService方法,如果您对Executor框架尚不清楚,可以看一下本人的关于java的Executor多线程框架的经验讲解。dcN办公区 - 实用经验教程分享!

    下图为javaExecutor多线程的图解:dcN办公区 - 实用经验教程分享!

    java快速理解和使用invokeall进行多线程编程dcN办公区 - 实用经验教程分享!

  • 2

    如果你对Executor框架已经了解,或者是并不感兴趣,那我们就接下来继续看invokeall的方法和具体使用操作吧!dcN办公区 - 实用经验教程分享!

    下图为Executor框架的概要:dcN办公区 - 实用经验教程分享!

    java快速理解和使用invokeall进行多线程编程dcN办公区 - 实用经验教程分享!

  • 3

    ExecutorService的invokeAll这个方法是有两种用法的:dcN办公区 - 实用经验教程分享!

    第一个用法是exec.invokeAll(tasks)dcN办公区 - 实用经验教程分享!

    而第二个用法是exec.invokeAll(tasks, timeout, unit)dcN办公区 - 实用经验教程分享!

    显然这是两两个函数是重载的方式,一个只有1个参数tasks,第二个由三个参数构成。下面我来简要介绍一下三个参数分别是什么:dcN办公区 - 实用经验教程分享!

    tasks:任务集合,就是所有将在多线程环境下跑的work。dcN办公区 - 实用经验教程分享!

    timeout:顾名思义,超时时间,即允许这个多线程运行的最长时间,超过就关闭线程。dcN办公区 - 实用经验教程分享!

    unit:前者(timeout)的时间单位,其实我蛮好奇为什么要多设一个时间单位的,个人觉得统一时间单位其实也是ok的。dcN办公区 - 实用经验教程分享!

    下图还有使用这俩函数需要import的内容。dcN办公区 - 实用经验教程分享!

    java快速理解和使用invokeall进行多线程编程dcN办公区 - 实用经验教程分享!

  • 4

    相比说了这么多,读者自己也应该能明白这两个invokeall的区别了吧,第一个,没有超时时间的设定,一直运行直到完成任务为止,虽然有较长的内存占用时间,但是这也意味着运行时间中途是没有任何输出的,想看结果只能苦苦等待。dcN办公区 - 实用经验教程分享!

    而第二个有时间的设定,就好了很多了。对于是否超时,我们可以通过future.get()方法返回的值和我们设定的timeout进行比较即可。dcN办公区 - 实用经验教程分享!

    ps:务必切记,第二个设定的timeout是全局所有线程的超时时间而不是单个线程的,超过这个时间,整个线程池都会关闭,切记!!!dcN办公区 - 实用经验教程分享!

  • 5

    当然,他们属于同一种方法,他们也有共同的功能。dcN办公区 - 实用经验教程分享!

    他们都是处理一个collection容器,处理过后返回一个Future容器。这两个容器虽然名称不同,但是结构是一模一样的。并且提交的collection列表和我们所得到的future列表有着顺序上一一对应的关系,一一对应,这个可是重点哦!dcN办公区 - 实用经验教程分享!

  • 6

    *** 说到返回值容器和处理容器结构相同,内容顺序对应,相比聪明的读者们肯定想到这个invokeall方法肯定是可以迭代的,把上一次操作的结果作为下一次操作的输入,可以实现invoke的多层次迭代操作。dcN办公区 - 实用经验教程分享!

  • 7

    说了这么多,我们来实战举个小例子吧,下面这个例子简洁明了的介绍了invokeall的具体使用方法,当了解了以上的只是以后,这段代码看上去是不是很好用、很简单呢?dcN办公区 - 实用经验教程分享!

    java快速理解和使用invokeall进行多线程编程dcN办公区 - 实用经验教程分享!

    java快速理解和使用invokeall进行多线程编程dcN办公区 - 实用经验教程分享!

  • 7本页面非法爬取自百度经验
  • 注意事项

    • 建议读者在看之前先了解一下java的Executor多线程框架,这样更能便于理解
    • invokeall个人建议除非项目需要,否则全部都设置成第二种限时的模式,不限时的多线程还是很危险的。

    以上方法由办公区教程网编辑摘抄自百度经验可供大家参考!dcN办公区 - 实用经验教程分享!


    标签: JAVA编程

    办公区 Copyright © 2016-2023 www.bgqu.net. Some Rights Reserved. 备案号:湘ICP备2020019561号统计代码