脏读

1、丢失数据更新 

如上图我们可以看出,线程1和线程2都对同一条数据进行更新, 
在T8时间点线程2已经完成了数据的更新,在T9时间点如果线程1回滚age=20,那线程2的更新age=25就丢失, 
另外一种,如果T9时间点 我们线程1提交,那我们线程2的age=25也丢失了 
2、数据脏读 

所谓的数据脏读,就是当并发的时候,一个线程进行修改,还未提交事务的时候另一个线程就读取了更新后的数据,但是后面第一个线程回滚,更新无效,那第二个线程读取到的数据就是脏数据 
3、数据虚读或者幻读 

此处的线程1修改完age之后,线程2立马进来修改了name,并提交事务,线程1在读取我们的数据,发现被修改了2个字段,这就是虚读或者幻读

4、不可重复读 

此处线程1先查询age=20,线程2把age修改Wie30,线程1再次查询的时候发现age=30,所以重复读取两次数据不一致,所以重复读取出错,

以上问题在并发中都可能存在,所以我们hiberante一定要处理线程并发的情况,hibernate就需要进行线程同步,提供的机制是利用锁来完成,

悲观锁 
所谓的悲观锁,就是hibernate心态不好,认为每一次操作都会出现并发,所以当我们查询数据的时候就直接把这一条数据锁住,不让别人操作。底层是利用的数据库的for update来实现的,就是查询数据的时候利用数据库把当前查询的数据给锁住,不让其他线程操作,实现如下:
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值