我应该在这个多线程程序中将join()放在哪里?

时间:2015-08-05 15:29:12

标签: java multithreading concurrency parallel-processing fork-join

我有一个程序将中值过滤应用于数组中的元素。我使用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;我的分叉对象再次聚集在一起,因为递归拆分索引引用只是从相同的数组中获取和设置。

0 个答案:

没有答案