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

 时间:2024-10-13 15:00:49

1、第一点,很多人其实并不知道invokeall属于哪一种方法,这里我要做一个说明,invokeall方法属于j锾攒揉敫ava多线程框架Executor中的ExecutorService方法,如果您对Executor框架尚不清楚,可以看一下本人的关于java的Executor多线程框架的经验讲解。下图为javaExecutor多线程的图解:

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

2、如果你对Executor框架已经了解,或者是并不感兴趣,那我们就接下来继续看invokeall的方法和具体使用操作吧!下图为Executor框架的概要:

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

3、ExecutorService的invoke钽吟篑瑜All这个方法是有两种用法的:第一个用法是exec.invokeAll(tasks)而第蘑节侍遑二个用法是exec.invokeAll(tasks, timeout, unit)显然这是两两个函数是重载的方式,一个只有1个参数tasks,第二个由三个参数构成。下面我来简要介绍一下三个参数分别是什么:tasks:任务集合,就是所有将在多线程环境下跑的work。timeout:顾名思义,超时时间,即允许这个多线程运行的最长时间,超过就关闭线程。unit:前者(timeout)的时间单位,其实我蛮好奇为什么要多设一个时间单位的,个人觉得统一时间单位其实也是ok的。下图还有使用这俩函数需要import的内容。

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

4、相比说了这么多,读者自己也应该能明白这两个invo氯短赤亻keall的区别了吧,第一个,没有超时时间的设定,一直运行直到完成任务为止,虽然有较长的内存占用时间,但是这也意味着运行时间中途是没有任何输出的,想看结果只能苦苦等待。而第二个有时间的设定,就好了很多了。对于是否超时,我们可以通过future.get()方法返回的值和我们设定的timeout进行比较即可。ps:务必切记,第二个设定的timeout是全局所有线程的超时时间而不是单个线程的,超过这个时间,整个线程池都会关闭,切记!!!

5、当然,他们属于同一种方法,他们也有共同的功能。他们都是处理一个collection容器,处理过后返回一个Future容器。这两个容器虽然名称不同,但是结构是一模一样的。并且提交的collection列表和我们所得到的future列表有着顺序上一一对应的关系,一一对应,这个可是重点哦!

6、*** 说到返回值容器和处理容器结构相同,内容顺序对应,相比聪明的读者们肯定想到这个invokeall方法肯定是可以迭代的,把上一次操作的结果作为下一次操作的输入,可以实现invoke的多层次迭代操作。

7、说了这么多,我们来实战举个小例子吧,下面这个例子简洁明了的介绍了invokeall的具体使用方法,当了解了以上的只是以后,这段代码看上去是不是很好用、很简单呢?

java快速理解和使用invokeall进行多线程编程
java快速理解和使用invokeall进行多线程编程
  • 星之卡比探索发现兑换码一览
  • 永恒之柱武僧和牧师介绍
  • 怪物猎人物语2迅龙怎么获得
  • 异星工厂新手攻略
  • 太刀水月架势怎么按
  • 热门搜索
    2035年的我手抄报 防病毒手抄报大全 交通安全手抄报资料 手抄报图片大全3年级 田园风光手抄报 抗美援朝手抄报内容 十一手抄报 红领巾相约中国梦手抄报 历史手抄报图片 同讲普通话携手进小康手抄报