Arrays.sort(与Comparator) - 相同或不同的线程?

时间:2015-10-10 20:52:32

标签: java sorting comparator

Arrays.sort方法中的比较器代码是否在同一个线程中调用 对排序或不同线程的调用?

我在JDK 8的背景下问这个问题。

我认为答案是它在同一个帖子中被调用,但我不是100%肯定。如果回答这个问题的人提供了一些参考或其他一些详细的解释(除了简单的是或否),我会很高兴。

1 个答案:

答案 0 :(得分:6)

答案是否定的。排序(Arrays.sort)是使用文档中的DualPivotQuicksort实现的:

  

这个类实现了Vladimir的Dual-Pivot Quicksort算法   Yaroslavskiy,Jon Bentley和Josh Bloch。该算法提供O(n   log(n))导致其他快速排序的许多数据集的性能   降级为二次性能,通常比...更快   传统(单枢轴)Quicksort实现。所有暴露的方法   是包私有的,旨在从公共方法调用(在   class Arrays)执行任何必要的数组边界检查后   将参数扩展为所需的形式。

正如你在the implementation中看到的那样 - 它不会启动任何线程。

此外,有parallelSort个方法使用ForkJoin公共池来执行并行执行。这是非常明确的,并且正如其他一些评论者已经提到的那样 - JDK API对于这样一个问题非常渺茫的可能性很小。