在某些环境下面,我们需要使用一次性向数据库中插入大量数据,如果采用单线程,可能速度较慢,此时大部分同学第一时间就会想到采用多线程来进行操作。
但是多线程如果无法保证事务的一致性,会造成数据库中出现大量的脏数据。
这里就谈谈多线程事务如何控制,这里的多线程控制基于分布式事务2PC提交思想,但是要注意的是多线程事务控制破环了事务的隔离性,即有一个线程发生异常,其他线程得跟着回滚,并且多线程事务会占用大量数据库连接,所以在大部分场景下是不推荐使用的,弊端很多。
创建SpringBoot项目
multi-thread-transaction
Pom文件
1 |
|
YML配置文件
1 |
|
线程池配置类
1 | package com.itjing.transaction.config; |
用户实体类
1 | package com.itjing.transaction.entity; |
用户持久层
1 | package com.itjing.transaction.dao; |
1 |
|
事务工具类
1 | package com.itjing.transaction.util; |
用户业务层
其中使用两种方式实现线程事务控制,一个是CyclicBarrier,一个是CountDownLatch。
1 | package com.itjing.transaction.service; |
1 | package com.itjing.transaction.service.impl; |
测试
1 | package com.itjing.transaction; |
最后
多线程事务控制代码自己写玩玩就行了,大部分场景不推荐。欢迎关注本人原创公众号:程序员阿晶
。