public void getGzcjgc() { //查询有效信息 List<Gzcjgc> gzCjgcs = gzcjgcMapper.selectCjgc(); //遍历信息 try { for (Gzcjgc gzcjgc : gzCjgcs) { //判断数据是否为空 if (StringUtils.isBlank(gzcjgc.getByxxId()) || StringUtils.isBlank(gzcjgc.getYear())) { throw new BusinessException("毕业学校编号或年度数据为空!"); } //初始化Key String redisKey; //判断毕业学校编号byxxId,999为全市编号 if ("999".equals(gzcjgc.getByxxId())) { redisKey = gzcjgc.getByxxId() + ":" + gzcjgc.getYear() + ":" + MapKeyUtil.getQsMap().get(gzcjgc.getXkkm()); } else { //判断毕业学校编号byxxId,其余为各高中编号 redisKey = gzcjgc.getByxxId() + ":" + gzcjgc.getYear() + ":" + MapKeyUtil.getGzMap().get(gzcjgc.getXkkm()); } String redisValue = getCjgcList(gzcjgc); //存入redis中 redisUtil.set(redisKey, redisValue); } } catch (Exception e) { log.error("发生异常:{}", e.getMessage(), e); } }这个方法怎样多线程
时间: 2024-01-28 21:03:36 浏览: 61
可以使用线程池来实现多线程,具体步骤如下:
1.创建一个线程池,通过ThreadPoolExecutor类来创建,可以设置线程池的核心线程数、最大线程数、线程存活时间等参数。
2.将任务分配给线程池执行,可以使用submit()方法来提交任务,返回一个Future对象,可以通过Future对象获取任务执行结果。
3.在for循环中,将每个任务提交到线程池中执行,可以使用Lambda表达式来实现。
4.在循环结束后,需要关闭线程池,释放资源。
代码示例:
```
public void getGzcjgc() {
//查询有效信息
List<Gzcjgc> gzCjgcs = gzcjgcMapper.selectCjgc();
//创建线程池
ExecutorService executorService = Executors.newFixedThreadPool(10);
try {
//遍历信息
for (Gzcjgc gzcjgc : gzCjgcs) {
//判断数据是否为空
if (StringUtils.isBlank(gzcjgc.getByxxId()) || StringUtils.isBlank(gzcjgc.getYear())) {
throw new BusinessException("毕业学校编号或年度数据为空!");
}
//初始化Key
String redisKey;
//判断毕业学校编号byxxId,999为全市编号
if ("999".equals(gzcjgc.getByxxId())) {
redisKey = gzcjgc.getByxxId() + ":" + gzcjgc.getYear() + ":"
+ MapKeyUtil.getQsMap().get(gzcjgc.getXkkm());
} else {
//判断毕业学校编号byxxId,其余为各高中编号
redisKey = gzcjgc.getByxxId() + ":" + gzcjgc.getYear() + ":"
+ MapKeyUtil.getGzMap().get(gzcjgc.getXkkm());
}
//提交任务到线程池
executorService.submit(() -> {
String redisValue = getCjgcList(gzcjgc);
//存入redis中
redisUtil.set(redisKey, redisValue);
});
}
} catch (Exception e) {
log.error("发生异常:{}", e.getMessage(), e);
} finally {
//关闭线程池
executorService.shutdown();
}
}
```
阅读全文