springboot 里面增删改查怎么用多线程写,持久层是mybatis

vbn19456 发布于 01/13 12:11
阅读 755
收藏 0

springboot 里面增删改查怎么用多线程写,持久层是mybatis

多线程继承的Runnable写的

加载中
-1
v
vbn19456

excel上传插入太慢了,差不多10秒,所以想试试多线程插入会不会好点

z
zcGoo
正常情况下你表格有多少数据要导入啊,怎么会要10秒,是不是数据库设计的不合理,看看是不是索引比较多。
v
vbn19456
回复 @魔力猫 : 不走网络,就在插入这里耗时10秒
魔力猫
魔力猫
确认一下数据库类型、版本,批量插入开关。你插入数据集数据多少?服务器到数据库带宽多少?确认瓶颈真的在插入数据库而不是别的地方吗?
0
魔力猫
魔力猫

问题是有什么意义呢? 

0
alanweb
alanweb

分批一批一批数据批量插入,不要一条一条插入。这样性能好很多的。

v
vbn19456
做了分批,不分批可能得慢10倍
0
浮云翌日
v
vbn19456
我试下,没用过
0
wad12302
wad12302

根据表的字段多少,内容大小来判断批量执行多少条一次提交事务 不然也会慢

0
此网页不存在

用@Async自然就是多线程的,不用自己写

0
网瘾少年徐志摩
网瘾少年徐志摩

Completablefuture做多线程并行,也可以用线程池实现如果你不需要返回插入的结果的话

批量插入或者单条插入和并行并不冲突,可以都有也可以只有一个

-1
ArchitectureMaster
ArchitectureMaster

楼上说的是对的,FutureTask非常合适题主的需求。多线程实现并不难,难的是多线程之间进行协调,线程的调度、内存分配、线程间的协作、数据共享。如果这实现这些功能一个任务调度系统是有必要的,FutureTask这个jar包非常适合。

当主线程由main入口出发,所有的实例对象都在当前线程里。而如果在当前线程打开一个Task时后台是开了一个新的线程,这时可以将需要的任务(sql)参数传入新的线程。

线程的特点是在创建启动时不会阻塞当前线程,所以当前线程可以继续开对应的多个线程来处理插入操作。这样可以将你的硬件性能尽可能的压榨。开线程的数量则可和你的硬件结合。

当然你的主线程由于没有阻塞,在执行完成创建你多个线程只是发出创建指令而不会等线程执行完成就执行过去,这时可能为防止调用线程结束(主线程)导致多个子线程没执行完成而被强行结束,这时通常需要对主线程作一个while(ture)无限循环!

OSCHINA
登录后可查看更多优质内容
返回顶部
顶部