论坛首页 Java企业应用论坛

遇到一个多事务并发的问题

浏览 12486 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-11-12  
事务在得到锁之后 要对数据进行逻辑校验
0 请登录后投票
   发表时间:2008-11-12  
hzwxm 写道
事务在得到锁之后 要对数据进行逻辑校验

是的,用乐观锁,for update,进行判断
0 请登录后投票
   发表时间:2008-11-13   最后修改:2008-11-13
有两种事务处理机制:乐观锁和悲观锁,for update其实就是悲观锁。楼主下面的文章说的是解决方案使用version机制,也就是乐观锁。
charles qi 写道
问题已经解决,可参见。
http://qify.iteye.com/admin/blogs/265040


这样就对同一个记录现时存在两种事务处理机制,而事务处理一般要求对同一记录使用一致的机制,也就是说要么都使用悲观锁,要么都使用乐观锁。楼主初始的问题也就是由于没有一致的使用某种事务机制造成的,事务1使用了悲观锁,而事务2没有锁。

因此比较好的解决方案是将事务2也使用悲观锁机制。或者将事务1和事务2都变成乐观锁机制,而不是一个事务使用乐观锁机制,而另一个事务使用悲观锁机制,这样不容易理解,也容易出错。


0 请登录后投票
   发表时间:2008-11-13  
要看想实现的效果了,企业应用架构模式(Patterns of Enterprise Application Architecture)中有一章concurrency讲这个的
悲观锁和乐观锁只是其中两种方式,还有粗粒度锁,离线锁等
即使是乐观锁也还可以细分为
1.根据id来update
  后修改的会覆盖前面修改的
2.根据修改过的字段和id来update(hibernate中的动态更新)
  如果修改的字段不同,两个都有效
  如果修改的字段相同,第二个被忽略
3.根据版本或者时间戳update
  第一个有效,第二个被忽略
0 请登录后投票
   发表时间:2008-11-13  
好帖子,支持一个,具体可以参考martin flower的那本j2ee开发的书。
0 请登录后投票
   发表时间:2008-11-13  
脏数据读取,oracle底层都已经实现了的
0 请登录后投票
   发表时间:2008-11-13   最后修改:2008-11-13
lifethinker 讲的很好,kenken0y的也不错!

对统一特定数据(或者表),采用统一的事务处理机制是很有必要的。
0 请登录后投票
   发表时间:2008-11-13  
并发不严重的情况下建议采用不那么耗性能的乐观锁,POJO IN ACTION里面也讲的很清楚
0 请登录后投票
   发表时间:2008-11-14  
可以用多版本控制并发
0 请登录后投票
   发表时间:2008-11-21  
charles qi 写道
javaboy2006

你想的太简单了。如果两个事务同时执行,事务2可能会覆盖掉事务1的更新,造成最终的字段值是错误的。


加个version字段, 近年版本
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics