不多啰嗦了,直接上代码。
方式一:使用 ThreadGroup 控制
IntStream.range(0, N)
.forEach(i -> new Thread(() -> ShellSort.sort(bucketsArray.get(i)), "子线程--桶-" + i).start());
return bucketsArray.stream().flatMapToLong(arr -> LongStream.of(arr)).toArray();
比如这段代码,bucketsArray 是一个 List<long[]> 对象,ShelloSort.sort 对一个 long[] 进行排序,bucketsArray 里面存储的各个桶 的 long[],第二个桶的 long 都比 第一个的大。
代码的目的就是分别对每个桶的 long[] 进行排序,利用多线程的方式加快了速度,之后再把 bucketsArray(List<long[]>)转化成 long[] 返回。因为是多线程同时运行,所以当 return 语句中得到值时,子线程都还没运行