Lambda表达式 - Arrays.sort方法是否被称为相同的线程?

时间:2017-01-28 14:16:59

标签: java-8

我在“Java 8 for the impatients”一书中提到了以下问题:

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

Arrays.sort(words,
(first, second) -> Integer.compare(first.length(), second.length()));

我不确定我是否正确理解了这个问题。它不应该运行相同的线程吗?为什么会出现多线程问题?

1 个答案:

答案 0 :(得分:1)

您可以直接浏览相关代码,例如通过您的IDE或grepcode:

http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8u40-b25/java/util/Arrays.java#Arrays.sort%28java.lang.Object%5B%5D%2Cjava.util.Comparator%29

public static <T> void More ...sort(T[] a, Comparator<? super T> c) {
    if (c == null) {
        sort(a);
    } else {
        if (LegacyMergeSort.userRequested)
            legacyMergeSort(a, c);
        else
            TimSort.sort(a, 0, a.length, c, null, 0, 0);
    }
}

从那里 - &gt; http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8u40-b25/java/util/TimSort.java#TimSort.sort%28java.lang.Object%5B%5D%2Cint%2Cint%2Cjava.util.Comparator%2Cjava.lang.Object%5B%5D%2Cint%2Cint%29

这是所有单线程,发生在同一个线程中。