背景
体系部门出《应知应答》活动,随机抽取试卷1600套试卷,串行化执行需要20分钟+,通过多线程处理锐减到50s
串行化处理的时间(20min+)
使用线程池处理的时间(50s)
代码
import cn.hutool.core.thread.ExecutorBuilder;
....
/**
* @param rr 随机配置
* @param u 考生列表
*/
public void genrateExam(List<Question> radio,
List<Question> check,
List<Question> decide,
List<RandRes> rr,
List<SysUser> u,
ConfExamValueVO confExamValueVO) {
if (u.size() == 0) {
return;
}
ExecutorService executor = ExecutorBuilder.create()
.setCorePoolSize(8) // 初始线程数
.setMaxPoolSize(16)// 最大线程数
.setWorkQueue(new LinkedBlockingQueue<>(u.size()))// 有界边界
.build();
for (int i = 0; i < u.size(); i++) {
final int index = i;
executor.submit(() -> {
Exam exam = new Exam();
.....业务代码
examService.insertExam(exam);
});
}
executor.shutdown();
}