乐观锁问题

yjjcyber 2011-03-21 03:48:37
遇到一个多线程的问题,处理并发数据,在进行上报时有5个线程来上报数据,但是上报的数据不能上报2次,那么就用到了乐观锁

String sql=" update table t set version=version+1 , t.转递标记='u' where version<"+oVersion+"+1 and t.id='"+id+"'";

返回一个bool值如果true那么进行下面测操作,否则肯定是有其他线程正在处理这条数据那么不执行这条数据的操作此线程处理下一条,不过还是有重复上报记录,请问有哪几种可能
...全文
159 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
yjjcyber 2011-04-04
  • 打赏
  • 举报
回复
synchronized加锁后,线程是停在那个方法等待其他线程处理完再处理加锁的方法还是,直接跳过执行下面语句
舞黯然 2011-03-27
  • 打赏
  • 举报
回复
你上报的记录就是id?会不会是id本身出现了重复的情况
蒙面客 2011-03-26
  • 打赏
  • 举报
回复
不明白乐观锁,不明白悲观锁。。。
友情帮顶。。。。
yjjcyber 2011-03-26
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 qingyuan18 的回复:]
synchronized是你java程序里面控制线程并发的,是应用层面的加锁,方法上加synchronized则同一时刻只能一个线程调用

乐观锁是数据库层面的,启用乐观锁要谨慎,虽然可以提高并发效率,但是如果多个事务之间的操作交集很多,那会有很多的重复执行操作
[/Quote]
说的我都明白,只有一个不明白,乐观锁就是背了避免并发的执行同样的操作,为什么用了乐观锁还会有重复操作呢?
qingyuan18 2011-03-24
  • 打赏
  • 举报
回复
synchronized是你java程序里面控制线程并发的,是应用层面的加锁,方法上加synchronized则同一时刻只能一个线程调用

乐观锁是数据库层面的,启用乐观锁要谨慎,虽然可以提高并发效率,但是如果多个事务之间的操作交集很多,那会有很多的重复执行操作
yaoweijq 2011-03-24
  • 打赏
  • 举报
回复
不如在数据库加个是否处理完成的字段
程序上用automaticboolean或类似的来控制
省得用锁的麻烦
jdk提供了为啥不用呢
jackey_ctdw 2011-03-24
  • 打赏
  • 举报
回复
不明白乐观锁 对锁不是很明白
yjjcyber 2011-03-24
  • 打赏
  • 举报
回复
问题补充:synchronized加锁,锁定多线程加在什么地方比较合适(块加锁),我锁定了一条update语句没效果,锁定了一个方法()就可以了晕死,还有select for update加锁在什么情况下用,他用了不就和单线程一样了吗?那为什么还用多线程搞不懂
yjjcyber 2011-03-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zn85600301 的回复:]
没看明白~~ 你上报数据的规则是什么 是只上报操作过的还是全部上报?
[/Quote]
上报没有上报过的而且一条记录只能上报一次
zn85600301 2011-03-21
  • 打赏
  • 举报
回复
没看明白~~ 你上报数据的规则是什么 是只上报操作过的还是全部上报?

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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