多线程+List 分段批量更新
约 418 字大约 1 分钟
多线程
2020-03-02
lscpu 显示CPU详细信息
Architecture: # 架构
CPU op-mode(s): # CPU 运行模式
Byte Order: # 字节序
CPU(s): # 逻辑CPU颗数
On-line CPU(s) list: # 在线CPU列表
Thread(s) per core: # 每个核的线程数
Core(s) per socket: # 每个CPU插槽核数/每颗物理CPU核数
CPU socket(s): # CPU插槽数
NUMA node(s): # NUMA节点
Vendor ID: # CPU厂商ID
CPU family: # CPU系列
Model: # 型号
Model name: # 型号名称
Stepping: # 步进
CPU MHz: # CPU主频
CPU max MHz: # CPU最大主频
CPU min MHz: # CPU最小主频
Virtualization: # CPU支持的虚拟化技术
L1d cache: # 一级缓存(CPU的L1数据缓存)
L1i cache: # 一级缓存(CPU的L1指令缓存)
L2 cache: # 二级缓存
List分段工具类
public class SplitListUtil {
/**
* 拆分集合
*
* @param <T> 泛型对象
* @param resList 需要拆分的集合
* @param subListLength 每个子集合的元素个数
* @return 返回拆分后的各个集合组成的列表
* 代码里面用到了guava和common的结合工具类
**/
public static <T> List<List<T>> splitList(List<T> resList, int subListLength) {
if (CollUtil.isEmpty(resList) || subListLength <= 0) {
return Lists.newArrayList();
}
List<List<T>> ret = Lists.newArrayList();
int size = resList.size();
if (size <= subListLength) {
// 数据量不足 subListLength 指定的大小
ret.add(resList);
} else {
int pre = size / subListLength;
int last = size % subListLength;
// 前面pre个集合,每个大小都是 subListLength 个元素
for (int i = 0; i < pre; i++) {
List<T> itemList = Lists.newArrayList();
for (int j = 0; j < subListLength; j++) {
itemList.add(resList.get(i * subListLength + j));
}
ret.add(itemList);
}
// last的进行处理
if (last > 0) {
List<T> itemList = Lists.newArrayList();
for (int i = 0; i < last; i++) {
itemList.add(resList.get(pre * subListLength + i));
}
ret.add(itemList);
}
}
return ret;
}
}