private static final int MAX_Request = 10000;
private static final LinkedBlockingQueue<StudentProductCustomPermissionValueBO> requestQueue = new LinkedBlockingQueue<>(MAX_Request);
@PreDestroy
@Scheduled(fixedDelay = 1000)
public void onTick() {
if (requestQueue.isEmpty()) {
return;
}
List<StudentProductCustomPermissionValueBO> requests = new ArrayList<>(requestQueue.size());
requestQueue.drainTo(requests);
save(requests);
}
public void offer(StudentProductCustomPermissionValueBO request) {
while (!requestQueue.offer(request)) {
// 如果队列满了,进行批量处理
onTick();
}
}
private void save(List<StudentProductCustomPermissionValueBO> requests) {
Map<Integer, List<StudentProductCustomPermissionValueBO>> groupBy = requests.stream()
.collect(Collectors.groupingBy(StudentProductCustomPermissionValueBO::getStudentId));
for (List<StudentProductCustomPermissionValueBO> rowList : groupBy.values()) {
StudentProductCustomPermissionValueBO row0 = rowList.get(0);
Integer studentId = row0.getStudentId();
Integer productCode = row0.getProductCode();
String fieldKey = row0.getFieldKey();
List<String> hexList = rowList.stream()
.map(StudentProductCustomPermissionValueBO::getHex)
.distinct()
.collect(Collectors.toList());
studentProductCustomPermissionValueService.incrementUsed(
studentId,
productCode,
fieldKey,
hexList);
}
}
java IO操作改为内存操作
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 序列流 序列流可以把多个字节输入流整合成一个,从序列流中读取数据时,将从被整合的第一个流开始读,读完一个读第二个,...
- 缓冲IO 在介绍缓冲IO之前需要先了解一下常用的机械硬盘的原理与特点 一个机械硬盘中装有多个盘片 每个盘片上有多个...
- 详见链接https://www.cnblogs.com/sunsky303/p/8962628.html 1.标准...
- 相关IO专题 JAVA IO专题一:java InputStream和OutputStream读取文件并通过soc...
- 相关java IO专题 JAVA IO专题一:java InputStream和OutputStream读取文件并...