假设我提交了主要ForkJoinPool
,使用ForkJoinTask
,它最终会调用其他20个子任务。之后,我提交了另一个类似的主要任务。
我想实现的是,主要任务将按照先进先出的顺序进行处理。现在的问题是,在第一个任务准备就绪之前,第二个任务的子任务可能已经开始执行:因此导致第一个主要任务的一些子任务等待。
因此,如果我能够每秒计算一项主要任务并提交10份报告,那么我希望在几秒钟内得到结果:1、2、3,..,而不是最后总共10个结果。>
如果使用ForkJoinPool
无法做到这一点,那么还有其他选择可以达到预期的效果吗?
答案 0 :(得分:0)
如果您不想并行计算两个(主要)任务,则不应同时运行它们。奇怪地告诉ForkJoinPool
:“这是我的任务B,请执行它,但尚未执行-等待任务A完成!”
换句话说:您不必调整池或任务实现,而应该在提交第二个任务之前等待第一个任务的计算。
例如:
ForkJoinTask taskA = ...;
ForkJoinTask taskB = ...;
taskA.invoke(); // awaits completion
taskB.invoke();
或者,您可以在类invoke(...)
上使用ForkJoinPool
个方法中的一个。