idea多线程debugger调试之并发读 及 synchronized 错误使用

 说说 问题,数据库 被插入了两条数据 排查 记录,看到如下 代码:

 

断点设置为 多线程

 

发送了两个请求 看到 两个线程都 停在这

 

分析 插入两条的原因:由于 加了synchronized  所以 有个 先后 顺序 但是 数据库 mysql5.7 默认隔离级别 为 可重复 读,所以第一个 线程 保存一条数据,另一个线程 去查 的时候 还是 查不到的,所以 就保存了 两次。

解决方案 很多 :直接 唯一索引 或者 用 lock 尝试 获取锁,获取不到 就不执行。

 

这里 抛一个问题,加入 service 出异常 重试 能查到 最新插入数据库里面的数据吗,答案 是可以的。因为 spring 事务 逻辑 理论 上 就是 

 

设置 连接 false 然后手动 提交,重试的时候 事务 已经 重新 开始了,所以拿的到最新的数据库数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值