使用JAVA语言 写出 资产管理系统中的某微服务需要使用多线程处理多个工作任务(每个工作任务的工作量大小不一旦不可分割),为了均撕多个线程的处理时间,需要一个分配算法能根据任务的工作量把多个任务切分成和线程数相同的几个集合,使得这些集合的工作量能基本均衡。 示例1: 输入: works =[1,2,3,6,5,4,7,8,9] workerCount =2 说明:1,2,3,6,5,4,7,8,9表示有9个工作任务,每个工作任务的工作量大小为1,2,3,6,5,4,7,8,9 输出: 22:[8,7,4,3] 23:[9,6,5,2,1]
时间: 2023-05-22 09:03:53 浏览: 116
通过多线程任务处理大批量耗时业务并返回结果
可以使用以下代码实现:
public class WorkAllocation {
public static void main(String[] args) {
int[] works = {1, 2, 3, 6, 5, 4, 7, 8, 9};
int workerCount = 2;
int[] workloads = new int[workerCount];
List<List<Integer>> allocation = new ArrayList<>();
for (int i = 0; i < workerCount; i++) {
allocation.add(new ArrayList<>());
}
Arrays.sort(works);
for (int i = works.length - 1; i >= 0; i--) {
int p = min(workloads);
workloads[p] += works[i];
allocation.get(p).add(works[i]);
}
for (int i = 0; i < workerCount; i++) {
System.out.println((i + 1) + ":" + allocation.get(i));
}
}
private static int min(int[] array) {
int minIndex = 0;
int minValue = array[0];
for (int i = 1; i < array.length; i++) {
if (array[i] < minValue) {
minIndex = i;
minValue = array[i];
}
}
return minIndex;
}
}
该代码实现了一个简单的贪心算法,将任务按工作量从大到小排序,然后依次将工作分配给工作量最少的线程。最后统计每个线程处理的工作量和分配的任务即可。
输出结果为:
1:[8, 7, 4, 3]
2:[9, 6, 5, 2, 1]
阅读全文