Arrays.sort
方法中的比较器代码是否在同一个线程中调用
对排序或不同线程的调用?
我在JDK 8的背景下问这个问题。
我认为答案是它在同一个帖子中被调用,但我不是100%肯定。如果回答这个问题的人提供了一些参考或其他一些详细的解释(除了简单的是或否),我会很高兴。
答案 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对于这样一个问题非常渺茫的可能性很小。