java - Threads之间划分一个奇数

标签 java arrays multithreading algorithm java-threads

我正在学习 Java 中的线程,我想按字母顺序对单词列表进行排序。我的程序读取一个 txt 文件的单词并将它们放入一个字符串数组中。用户可以自己选择要使用多少个线程。我想将数组拆分为线程可以自行排序的均匀(尽可能) block 。

所以我的问题是:

如何在线程间尽可能均匀地拆分 array.length?我的大脑一片空白,我想不出一个聪明的方法来做到这一点。

例如:如果我有一个 array.length 为 22 和 4 个线程,在这种情况下如何给线程; 6、6、5 和 5 大小的数组?需要适用于给定的每个数字。

我尽量解释清楚了,有什么不明白的地方请追问!谢谢!

最佳答案

让我举个例子,因为它很容易解释。 4 个线程中的 22 个元素。

22 % 4 = 2。这给出了将比其余线程多获得一个元素的线程数。

22/4 = 5。这为您提供了每个线程的最少元素数。

现在开始将您的数组分成 5 个元素,并将它们分别分配给一个线程,直到剩下 (22%4) 2 个线程。将剩余的 (5+1=6) 个元素分别分配给它们。

关于java - Threads之间划分一个奇数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36688900/

相关文章:

java - "Swing components are light-weight"是什么意思?

Java命令存储

java - Android/Java 解析匿名 JSONArray 对象

multithreading - 在 Kotlin 中停止线程

c# - 如何从 Process.GetCurrentProcess().Threads 获取托管线程

java - 在 Java 中使用 OpenImaj 从视频中提取帧

java - Java 垃圾收集器在这里是如何工作的?

java - 通用集合可以序列化吗?

arrays - 使用JSONPATH解析JSON数组文件

C++:Linux:从 `cout` 以外的多个线程或流通过管道传输到我的程序