ForkJoinPool任务优先级

时间:2018-06-22 13:31:39

标签: java

假设我提交了主要ForkJoinPool,使用ForkJoinTask,它最终会调用其他20个子任务。之后,我提交了另一个类似的主要任务。

我想实现的是,主要任务将按照先进先出的顺序进行处理。现在的问题是,在第一个任务准备就绪之前,第二个任务的子任务可能已经开始执行:因此导致第一个主要任务的一些子任务等待。

因此,如果我能够每秒计算一项主要任务并提交10份报告,那么我希望在几秒钟内得到结果:1、2、3,..,而不是最后总共10个结果。

如果使用ForkJoinPool无法做到这一点,那么还有其他选择可以达到预期的效果吗?

1 个答案:

答案 0 :(得分:0)

如果您不想并行计算两个(主要)任务,则不应同时运行它们。奇怪地告诉ForkJoinPool:“这是我的任务B,请执行它,但尚未执行-等待任务A完成!”

换句话说:您不必调整池或任务实现,而应该在提交第二个任务之前等待第一个任务的计算。

例如:

ForkJoinTask taskA = ...;
ForkJoinTask taskB = ...;

taskA.invoke(); // awaits completion
taskB.invoke();

或者,您可以在类invoke(...)上使用ForkJoinPool个方法中的一个。