IDEA中怎么设置项目更改后的分析延迟时间,IDEA是java编程语言的集成开发环境,使用该软件编写代码时,可以设置项目更改后的分析延迟时间,这样就可确保项目范围分析的正确性,具体的操作步骤如下。......
2023-07-04 622 JAVA
invokeall是在Java多线程变成之中,经常用来批量调用数据和批量返回数据,本篇文章将会帮助你快速理解和使用invokeall方法,希望读者在阅读之后可以学有所得。
第一点,很多人其实并不知道invokeall属于哪一种方法,这里我要做一个说明,invokeall方法属于java多线程框架Executor中的ExecutorService方法,如果您对Executor框架尚不清楚,可以看一下本人的关于java的Executor多线程框架的经验讲解。
下图为javaExecutor多线程的图解:
如果你对Executor框架已经了解,或者是并不感兴趣,那我们就接下来继续看invokeall的方法和具体使用操作吧!
下图为Executor框架的概要:
ExecutorService的invokeAll这个方法是有两种用法的:
第一个用法是exec.invokeAll(tasks)
而第二个用法是exec.invokeAll(tasks, timeout, unit)
显然这是两两个函数是重载的方式,一个只有1个参数tasks,第二个由三个参数构成。下面我来简要介绍一下三个参数分别是什么:
tasks:任务集合,就是所有将在多线程环境下跑的work。
timeout:顾名思义,超时时间,即允许这个多线程运行的最长时间,超过就关闭线程。
unit:前者(timeout)的时间单位,其实我蛮好奇为什么要多设一个时间单位的,个人觉得统一时间单位其实也是ok的。
下图还有使用这俩函数需要import的内容。
相比说了这么多,读者自己也应该能明白这两个invokeall的区别了吧,第一个,没有超时时间的设定,一直运行直到完成任务为止,虽然有较长的内存占用时间,但是这也意味着运行时间中途是没有任何输出的,想看结果只能苦苦等待。
而第二个有时间的设定,就好了很多了。对于是否超时,我们可以通过future.get()方法返回的值和我们设定的timeout进行比较即可。
ps:务必切记,第二个设定的timeout是全局所有线程的超时时间而不是单个线程的,超过这个时间,整个线程池都会关闭,切记!!!
当然,他们属于同一种方法,他们也有共同的功能。
他们都是处理一个collection容器,处理过后返回一个Future容器。这两个容器虽然名称不同,但是结构是一模一样的。并且提交的collection列表和我们所得到的future列表有着顺序上一一对应的关系,一一对应,这个可是重点哦!
*** 说到返回值容器和处理容器结构相同,内容顺序对应,相比聪明的读者们肯定想到这个invokeall方法肯定是可以迭代的,把上一次操作的结果作为下一次操作的输入,可以实现invoke的多层次迭代操作。
说了这么多,我们来实战举个小例子吧,下面这个例子简洁明了的介绍了invokeall的具体使用方法,当了解了以上的只是以后,这段代码看上去是不是很好用、很简单呢?
以上方法由办公区教程网编辑摘抄自百度经验可供大家参考!
相关文章
IDEA中怎么设置项目更改后的分析延迟时间,IDEA是java编程语言的集成开发环境,使用该软件编写代码时,可以设置项目更改后的分析延迟时间,这样就可确保项目范围分析的正确性,具体的操作步骤如下。......
2023-07-04 622 JAVA
IDEA中怎么设置调试器最近表达式的最大数量,IDEA是java编程语言的集成开发环境,使用该软件编写代码时,可以设置调试器最近表达式的最大数量,从而有效避免调试器中表达式存储过多。......
2023-07-04 443 JAVA