多线程下脏数据问题

坚持写博客 2018-07-17 10:41:36
并发情况下,方法上加同步关键字 synchronized 然后更新数据库,更新的时候 先去查,然后更新,

这是代码

日志

不加这个睡眠就查询到脏数据
有人知道为什么吗
...全文
313 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
maradona1984 2018-07-17
  • 打赏
  • 举报
回复
引用 5 楼 yujingwei1001 的回复:
在方法上加了@Transactional(propagation = Propagation.REQUIRED, timeout = 5,isolation = Isolation.SERIALIZABLE)事务隔离级别,但是 Read committed并不能解决我的问题,我设置为了最高级别,就不需要睡眠时间。

你这纯粹本末倒置了,乐观锁本就是避免用锁,你这隔离级别搞最高,乐观锁还有啥意义?
一般情况下乐观锁没有更新到数据,重试原来的操作即可,做个循环,当然也可以直接抛异常中断,而不是把事务隔离级别设置最高
坚持写博客 2018-07-17
  • 打赏
  • 举报
回复
在方法上加了@Transactional(propagation = Propagation.REQUIRED, timeout = 5,isolation = Isolation.SERIALIZABLE)事务隔离级别,但是 Read committed并不能解决我的问题,我设置为了最高级别,就不需要睡眠时间。
Braska 2018-07-17
  • 打赏
  • 举报
回复
乐观锁本来就是解决并发但不解决脏读问题的。
一楼说了事务隔离级别设置成READ_COMMITTED就能避免脏读问题。
坚持写博客 2018-07-17
  • 打赏
  • 举报
回复
引用 1 楼 maradona1984 的回复:
不建议加synchronized,乐观锁也能解决并发问题
而且没看出来哪有脏数据了,事务隔离级别设置成Read committed就可以避免脏读了

更新完成了,加了睡眠时间就能正常更新,不加睡眠时间 就会报错,我的问题是这个,其实乐观锁已经防止并发了,没更新成功嘛 这不是,我数据库是加了乐观锁的。
坚持写博客 2018-07-17
  • 打赏
  • 举报
回复
引用 1 楼 maradona1984 的回复:
不建议加synchronized,乐观锁也能解决并发问题
而且没看出来哪有脏数据了,事务隔离级别设置成Read committed就可以避免脏读了
日志


2018-07-13 14:36:52.182 [com.bill99.hat.paycore.processors.biz.notify.SettleNotifyProcessor:INFO ] [process-128]- 【abc0000056】Update start : version = 288
2018-07-13 14:36:52.301 [com.bill99.hat.paycore.processors.biz.notify.SettleNotifyProcessor:INFO ] [process-153]- 【abc0000056】Update end : version = 289
2018-07-13 14:36:52.301 [com.bill99.hat.paycore.processors.biz.notify.SettleNotifyProcessor:INFO ] [process-160]- 【abc0000056】Release Lock
2018-07-13 14:36:52.302 [com.bill99.hat.paycore.processors.biz.notify.SettleNotifyProcessor:INFO ] [process-118]- 【abc0000005】Get Lock
2018-07-13 14:36:52.357 [com.bill99.hat.paycore.processors.biz.notify.SettleNotifyProcessor:INFO ] [process-128]- 【abc0000005】Update start : version = 288
2018-07-13 14:36:52.408 [com.bill99.hat.paycore.processors.biz.notify.SettleNotifyProcessor:ERROR ] [process-156]- update error!traceId=abc0000005,
hat.paycore.base.commons.HatRTException: Optimistic.Lock.Error: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect)
maradona1984 2018-07-17
  • 打赏
  • 举报
回复
不建议加synchronized,乐观锁也能解决并发问题
而且没看出来哪有脏数据了,事务隔离级别设置成Read committed就可以避免脏读了

50,528

社区成员

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

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