2014-07-24 32 views
-2

两个代码段,一个是连续的,另一种是并联:
以下两个代码是否得到相同的结果?下面

public<T> void sequentialRecursive(List<Node<T>> nodes, Collection<T> results) 
{ 
    for(Node<T> n: nodes) { 
    results.add(n.compute()); 
    sequentialRecursive(n.getChildren(), results); 
    } 
} 

public<T> void parallelRecursive(final Executor exec, List<Node<T>> nodes, final Collection<T> results) { 
    for(final Node<T> n : nodes){ 
    exec.execute(new Runnable(){ 
    public void run() 
    { 
    results.add(n.compute()); 
    } 
    }); 
    parallelRecursive(exec, n.getChildren(), results); 
} 
} 

我想知道如果上述两个功能产生相同的结果?低于结果可能吗?
SequentialRecursive的结果是:[1,2,3,4,5],并且ParallelRecursive的结果是:[1,3,2,5,4]。

+0

您是否尝试过实际运行它? :) – Scis

+1

当你试图执行这两种方法时,输出是什么? –

+0

对不起,我没有尝试,它是一本书中的例子。我对此感到困惑。 – Charlesjean

回答

1

第二个函数将以不可预知的顺序得到结果,因为它创建每个任务并计算节点的答案,并且执行程序通过将这些任务提供给不同的线程来处理这些任务。不知道结果将添加到什么顺序,这取决于调度程序在什么时候选择哪个线程。

可靠地获得相同结果的方法之一是使用SingleThreadExecutor作为第二个示例。

相关问题