工作内容,不对外开放
应用过的知识点
事务、均分list为n等份、构建一个合理的线程池、sqlSession、CountDownLatch、AtomicBoolean
背景介绍
1,最近有一个大数据量插入的操作入库的业务场景,需要先做一些其他修改操作,然后在执行插入操作,由于插入数据可能会很多,用到多线程去拆分数据并行处理来提高响应时间,如果有一个线程执行失败,则全部回滚。
2,在spring中可以使用@Transactional注解去控制事务,使出现异常时会进行回滚,在多线程中,这个注解则不会生效,如果主线程需要先执行一些修改数据库的操作,当子线程在进行处理出现异常时,主线程修改的数据则不会回滚,导致数据错误。
3,下面用一个简单示例演示多线程事务。
公用的类和方法
/**
* averageAssign用来把list平均分成n等份
* averageAssign(list, 3) 就是把list平均分成3份,list长度是19那么平均分成3份就是7,6,6
*/
public static <T