在 Java 里“多线程排序”通常有几种不同层次的做法,取决于你是自己写多线程排序算法,还是利用已有工具并行排序。下面按常见场景给你讲清楚。
int[] arr = {5, 3, 8, 1, 2};
Arrays.parallelSort(arr);
✅ 内部使用 ForkJoinPool
✅ 数据量大时才明显更快
✅ 使用简单,生产推荐
List<Integer> list = Arrays.asList(5, 3, 8, 1, 2);
list.parallelStream()
.sorted()
.collect(Collectors.toList());
⚠️ 注意:返回的是新 List,原 List 不变
class MergeSortTask extends RecursiveAction {
int[] arr;
int left, right;
MergeSortTask(int[] arr, int left, int right) {
this.arr = arr;
this.left = left;
this.right = right;
}
protected void compute() {
if (right - left <= 1) return;
int mid = (left + right) / 2;
invokeAll(
new MergeSortTask(arr, left, mid),
new MergeSortTask(arr, mid, right)
);
merge(left, mid, right);
}
void merge(int l, int m, int r) {
int[] temp = Arrays.copyOfRange(arr, l, r);
int i = 0, j = m - l, k = l;
while (i < m - l && j < r - l) {
arr[k++] = temp[i] < temp[j] ? temp[i++] : temp[j++];
}
while (i < m - l) arr[k++] = temp[i++];
}
}
// 使用
ForkJoinPool pool = new ForkJoinPool();
pool.invoke(new MergeSortTask(arr, 0, arr.length));
✅ 真正多线程
❌ 写起来复杂,容易出错
当数据不能放进内存:
这是数据库 / 搜索引擎常用方案。
✅ 适合:
❌ 不适合:
| 场景 | 推荐方式 |
|---|---|
| 普通业务 | Arrays.parallelSort |
| 流式处理 | parallelStream().sorted() |
| 学习算法 | ForkJoin 归并排序 |
| 超大文件 | 外部排序 |
如果你愿意,可以告诉我:
我可以直接给你最合适的代码。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。