Java把一个大集合拆分成多个小集合,可以利用多线程提升并发处理效率
java佼佼子:
哥们,我给你的逻辑优化了一下,看看我这个代码
//数据准备
List objects = ListUtil.toList("1", "2", "3", "4", "5", "6", "7", "8","0","11");
//线程数,按线程数拆分
int threadCount1 = objects.size()/3;
int threadCount = objects.size()%3; //余数
if(threadCount!=0){
threadCount1+=1;
}
System.out.println(threadCount1);
//线程数,按线程数拆分
threadCount = threadCount1;
//按线程数平均分配后,每个线程处理的数据量
int perThreadData = objects.size() / threadCount;
//按线程数平均分配后,多余的数据量
int remainderCount = objects.size() % threadCount;
if(remainderCount!=0){
perThreadData+=1;
}
for (int i = 0; i < threadCount; i++) {
//处理平均分配的数据量,多余的数据放在最后一个线程中处理
List splitList = objects.stream()
.skip(i * perThreadData)
.limit((i == threadCount - 1) ? (perThreadData + remainderCount) : perThreadData)
.collect(Collectors.toList());
System.out.println("splitList = " + splitList);
//此时可以开启多线程处理数据,提高并发处理效率
}
|