for循环插入数据,高并发时会产生一条数据多次插入

lmkght 2017-01-04 11:40:50
首先我有一个插入方法,逻辑是先根据某些条件查询数据库是否有这条数据,若有则修改,没有则新增
然后我另有一个方法利用for循环去跑插入方法,如果正常情况这个流程是正确的,但是当带有for循环的那个方法发生了高并发的访问时会出现一条数据多次插入的情况,请问如何才能在大量数据高并发访问时避免这种情况
...全文
1123 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lmkght 2017-01-04
  • 打赏
  • 举报
回复
引用 1 楼 shzy1988 的回复:
给插入的方法添加synchronized关键字,这样能保证同步
如果用这个关键字,是否会影响执行速度,如果有300个线程进行插入,我现在情况是10S左右 加上这个会不会变成30到40秒
bcsflilong 2017-01-04
  • 打赏
  • 举报
回复
引用 1 楼 shzy1988 的回复:
给插入的方法添加synchronized关键字,这样能保证同步
这个方式是可以的
双子叶 2017-01-04
  • 打赏
  • 举报
回复
给插入的方法添加synchronized关键字,这样能保证同步
双子叶 2017-01-04
  • 打赏
  • 举报
回复
引用 5 楼 lmkght 的回复:
[quote=引用 1 楼 shzy1988 的回复:] 给插入的方法添加synchronized关键字,这样能保证同步
这个方法 我已经试过了 确实可以解决我的问题 但是却延长了一分钟的运行时间 还有什么方法可以在不延长运行时间的同时解决问题么[/quote] 试试用lock,看看时间上是否能满足 private volatile ReentrantLock lock = new ReentrantLock(); lock.lock(); insert();//插入方法 lock.unlock();
lmkght 2017-01-04
  • 打赏
  • 举报
回复
引用 1 楼 shzy1988 的回复:
给插入的方法添加synchronized关键字,这样能保证同步
这个方法 我已经试过了 确实可以解决我的问题 但是却延长了一分钟的运行时间 还有什么方法可以在不延长运行时间的同时解决问题么
爱睡觉的阿狸 2017-01-04
  • 打赏
  • 举报
回复
逻辑是先根据某些条件查询数据库是否有这条数据,我觉得可以将某些条件建立个唯一性索引,sql中使用ON DUPLICATE KEY的方式,当重复的时候则更新。

50,530

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧