List<UserEo> userEoList = comDataComponent.getUserListByUid(); for (UserEo userEo : userEoList) { List<DataPermissionSchema> userDataPermissionSchema = getUserDataPermissionSchema(userEo.getUserUid(), userEo.getOrgCode()); //将当前用户的数据权限 存入redis key = SystemsConstant.DATA_PERMISSION_SCHEMA + UserUid redisTemplate.opsForValue().set(SystemsConstant.DATA_PERMISSION_SCHEMA + userEo.getUserUid(), ObjectUtil.toString(userDataPermissionSchema)); }userEoList数据量一万怎么优化代码
时间: 2023-08-03 15:05:45 浏览: 309
C#_List用法详解
可以考虑使用多线程来提高代码的执行效率,将循环遍历的过程拆分成多个线程并行执行,可以采用线程池来管理线程的执行。具体实现如下:
1. 创建线程池
```
// 创建一个线程池,根据CPU核心数来创建
int corePoolSize = Runtime.getRuntime().availableProcessors();
ExecutorService executorService = Executors.newFixedThreadPool(corePoolSize);
```
2. 将任务拆分成多个子任务,并提交到线程池中执行
```
// 将任务拆分成多个子任务
List<List<UserEo>> subUserEoList = ListUtils.splitList(userEoList, corePoolSize);
// 提交子任务到线程池中执行
for (List<UserEo> subList : subUserEoList) {
executorService.execute(() -> {
for (UserEo userEo : subList) {
List<DataPermissionSchema> userDataPermissionSchema = getUserDataPermissionSchema(userEo.getUserUid(), userEo.getOrgCode());
redisTemplate.opsForValue().set(SystemsConstant.DATA_PERMISSION_SCHEMA + userEo.getUserUid(), ObjectUtil.toString(userDataPermissionSchema));
}
});
}
```
3. 关闭线程池
```
// 关闭线程池
executorService.shutdown();
```
其中,ListUtils.splitList() 可以使用 Apache Commons Collections 库中的工具类实现,可以将一个大的 List 拆分成多个子 List,每个子 List 的大小相等或者差不多相等。这样可以将任务平均分配到多个线程中执行,提高代码的执行效率。
阅读全文