并发问题(二)什么是并发

1. 什么是并发操作?

并发操作是指同一时间可能有多个用户对同一数据进行读写操作.

2. 并发操作对数据的影响

如果对并发操作不做任何控制的话,会造成数据的不完整性。可能造成读脏数据,不可重复读,丢失修改还有幻读。

 

3. 对数据不完整性的举例

(1) 丢失修改

当两个或多个事务(或两个或多个用户)选择同一行,然后基于最初选定的值更新该行时,会发生丢失更新问题。每个事务都不知道其它事务的存在(或每个用户操作时并不会考虑同一时刻是否有别的用户进行着同样的操作)。最后的更新将重写由其它事务所做的更新,这将导致数据丢失。 

选课:学生A、学生B、课程1的余量=20

a.学生A选择课程1时,先读出课程余量20

b.然而同一时刻(也可是不同时刻,只要在学生A更新数据之前),学生B也读出了课程1的余量20

c.学生A选择此课程,课程1余量-1,写入数据库,此时课程1的余量=19

d.学生B选择此课程,课程1余量-1(因为之前读出的课程1余量为20-1后为19),写入数据库,此时课  1的余量=19

 课程余量=19 数据正确吗?不正确。实际情况课程余量应更新为18——B的修改覆盖了A的修改 

(2) 读脏数据

当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,

另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据,那么另外一个

事务读到的这个数据是脏数据,依据脏数据所做的操作可能是不正确的。

1.张三的工资为2000, 老板把张三的工资改为了8000(但未提交事务)        

2.张三查看自己的工资 ,发现工资变为了8000

3.而后老板发现改错了,回滚了事务,张三的工资又变回了2000

       那么,张三读取的工资8000元就是脏数据

(3) 不可重复读

当第二个事务多次访问同一行而且每次读取不同的数据时,会发生不一致的分析问题。不一致的分析与未确认的相关性类似,因为其它事务也是正在更改第二个事务正在读取的数据。然而,在不一致的分析中,第二个事务读取的数据是由已进行了更改的事务提交的。而且,不一致的分析涉及多次(两次或更多)读取同一行,而且每次信息都由其它事务更改;因而该行被非重复读取。

例子1:事务T1、事务T2、张三的工资=1000

a.事务T1张三读取自己的工资为1000,操作并没有完成

b.此时(事务T1读取了张三工资为1000)事务2中,修改了张三的工资为2000,并提交了事务.

c.此时(事务T1读取了张三工资为1000元,事务T2修改了张三的工资为2000元)在事务1中,张三再次读  取自己的工资时,工资变为了2000

 

转载自http://blog.csdn.net/hanxuemin12345/article/details/21740699

并发问题(三)Hibernate事务与并发问题处理(乐观锁与悲观锁)


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值