1.并发定义:
多个线程同时执行一个操作,同时修改数据库的数据,导致数据不一致的情况
2.并发处理
一般情况下,并发处理无非两种,第一种就是加锁:锁的类型,按照思想方法来分,可以分为两种。1.悲观锁。2,乐观锁。第二种处理就是使用队列,将线程入队列,一个一个执行,队列一定要是线程安全的队列。
3.悲观并发和乐观并发
悲观并发:两个线程同时修改数据库的同一张表,A进入修改,B就不能修改,只能等待A改完,B才能进入修改
乐观并发:A修改,B也可以修改,如果在A保存之后B再保存他的修改,此时系统检测到数据库中记录与B刚进入时不一致,B保存时会抛出异常,修改失败
乐观并发的基本出发点是:当保存数据的时候抱着一种乐观的态度,不期望发生并发冲突,即使万一发生并发冲突,也能捕捉到冲突异常,然后根据策略解决冲突,而解决冲突的方式一般分为Client wins(以后操作者为赢) 和 Store wins(以先存储的数据为赢)。
4.EF如何控制并发
EF使用的是乐观并发,每一次操作表 字段TimeStamp的值都会改变,而每次对表做操作时都会比对对象的TimeStamp值与数据库中表的值是否相同,是则操作表,否 ,则抛出异常给客户端或是刷新对象状态后重新保存,