锁定老帖子 主题:遇到一个多事务并发的问题
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-11-12
事务在得到锁之后 要对数据进行逻辑校验
|
|
返回顶楼 | |
发表时间:2008-11-12
hzwxm 写道 事务在得到锁之后 要对数据进行逻辑校验
是的,用乐观锁,for update,进行判断 |
|
返回顶楼 | |
发表时间:2008-11-13
最后修改:2008-11-13
有两种事务处理机制:乐观锁和悲观锁,for update其实就是悲观锁。楼主下面的文章说的是解决方案使用version机制,也就是乐观锁。
charles qi 写道 问题已经解决,可参见。
http://qify.iteye.com/admin/blogs/265040 这样就对同一个记录现时存在两种事务处理机制,而事务处理一般要求对同一记录使用一致的机制,也就是说要么都使用悲观锁,要么都使用乐观锁。楼主初始的问题也就是由于没有一致的使用某种事务机制造成的,事务1使用了悲观锁,而事务2没有锁。 因此比较好的解决方案是将事务2也使用悲观锁机制。或者将事务1和事务2都变成乐观锁机制,而不是一个事务使用乐观锁机制,而另一个事务使用悲观锁机制,这样不容易理解,也容易出错。 |
|
返回顶楼 | |
发表时间:2008-11-13
要看想实现的效果了,企业应用架构模式(Patterns of Enterprise Application Architecture)中有一章concurrency讲这个的
悲观锁和乐观锁只是其中两种方式,还有粗粒度锁,离线锁等 即使是乐观锁也还可以细分为 1.根据id来update 后修改的会覆盖前面修改的 2.根据修改过的字段和id来update(hibernate中的动态更新) 如果修改的字段不同,两个都有效 如果修改的字段相同,第二个被忽略 3.根据版本或者时间戳update 第一个有效,第二个被忽略 |
|
返回顶楼 | |
发表时间:2008-11-13
好帖子,支持一个,具体可以参考martin flower的那本j2ee开发的书。
|
|
返回顶楼 | |
发表时间:2008-11-13
脏数据读取,oracle底层都已经实现了的
|
|
返回顶楼 | |
发表时间:2008-11-13
最后修改:2008-11-13
lifethinker 讲的很好,kenken0y的也不错!
对统一特定数据(或者表),采用统一的事务处理机制是很有必要的。 |
|
返回顶楼 | |
发表时间:2008-11-13
并发不严重的情况下建议采用不那么耗性能的乐观锁,POJO IN ACTION里面也讲的很清楚
|
|
返回顶楼 | |
发表时间:2008-11-14
可以用多版本控制并发
|
|
返回顶楼 | |
发表时间:2008-11-21
charles qi 写道 javaboy2006
你想的太简单了。如果两个事务同时执行,事务2可能会覆盖掉事务1的更新,造成最终的字段值是错误的。 加个version字段, 近年版本 |
|
返回顶楼 | |