我只是在学习Java中的线程,并且想按字母顺序对单词列表进行排序。我的程序读取txt文件中的单词,然后将它们放在字符串数组中。用户可以选择自己想使用多少个线程。我想将数组分成偶数个(尽可能)的块,线程可以自己对它们进行排序。
所以对我的问题:
我如何在所有线程之间尽可能地拆分array.length?我的脑袋一片空白,我想不出一种聪明的方法来做到这一点。
例如:如果我的array.length为22和4个线程,在这种情况下如何给线程;6、6、5和5个大小的阵列?需要适用于给定的每个数字。
我尽力解释了一下,请询问是否不清楚!谢谢!
它不需要尽可能均匀。如果一个线程有6个,这将确定所花费的时间长度,在这种情况下,多达6个线程无关紧要。
你可以做
int chunkSize = (tasks + threads - 1) / threads; // divide by threads rounded up.
for (int t = 0; t < threads; t++) {
int start = t * chunksSize;
int end = Math.min(start + chunkSize, tasks);
executor.submit(() -> {
// inside the thread
for (int i = start; i < end; i++) {
process(i);
});
}
注意:如果使用Stream.of(array).parallel(),则实际上每个线程创建两个任务。这样可以缓解某些批次即使元素数量相同也可能需要更长的时间。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句