我有一个程序将中值过滤应用于数组中的元素。我使用Java的Fork / Join Framework进行分而治之以实现这一目标。这是我的compute()
覆盖:
public FilterObject(int lo, int hi, boolean filterType)
{
this.lo = lo;
this.hi = hi;
this.filterType = filterType;
}
public void compute()
{
if (hi - lo <= SEQUENTIAL_THRESHOLD)
{
seqFilter();
}
else
{
FilterObject left = new FilterObject(lo, (hi + lo) / 2, filterType);
FilterObject right = new FilterObject((hi + lo) / 2, hi, filterType);
left.fork();
right.compute();
left.join();
}
}
seqFilter()
是一种静态方法,一旦子阵列足够小就可以进行实际过滤&#34;。
我的join()
是否在正确的位置?我有一个计时器在我的Main
课程中运行,记录的时间我似乎太快了。我在我的pool.invoke(filt)
课程中呼叫Main
,其中filt
是我的FilterObject
对象而pool
是我的ForkJoinPool
。我的计时器在此通话后立即停止。在并行流程完成之前,主逻辑是否可能继续存在?如果是,我可以在哪里放join()
来阻止这种情况发生?
编辑:其他问题 - 在这种情况下我甚至需要join()吗?程序分叉,但它并不像我实际加入&#39;我的分叉对象再次聚集在一起,因为递归拆分索引引用只是从相同的数组中获取和设置。