赞
踩
在用到悲观锁的时候遇到了一个问题
明明锁了行,但是还是能够读取到该行数据,并没有实现读等待,
问题出现在了
悲观锁只会把所有写了forupdate的语句进入队列
例如:
A进行
public void A(){
bDao.find(select * from bid WHERE bid_id = 1 for update);
......
commit();
}
B进行
public void B(){
bDao.find( select * from bid WHERE bid_id = 1);
......
commit();
}
C进行
public void C(){
bDao.find(select * from bid WHERE bid_id = 1 for update);
......
commit();
}
A先直行,在直行commit之前,B和C进来了
此时B执行,能查询到数据,但是如果之后的业务中有对于bid的update语句,则会等待,直到Acommit后才会提交修改
C则会在一开始的查询就开始进行等待,知道Acommit后才会查询到数据
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。