我想请问下大家在真实的项目中是如何处理并发事务的

解决方案 »

  1.   

    你要说的是分布式或者JTA事务吧
      

  2.   

    就是事务的并发控制,好比我现在处理一张订单,此时另外一个操作人员也处理我这张订单,如何控制只有一个人操作成功。 我想到的就只有使用oracle的共享锁 或者使用version/时间戳机制,请问还有什么别的方法了吗?
      

  3.   

    所谓悲观锁是说当你要用到数据库中某张表,就立马将该表锁住,那么这张表对其他人是不可见的,别的用户想要用这张表中的数据,只有等你释放锁之后才行;
    缺点:比如某个用户,在锁住某张表的时候去干别的事情了,那么在他干别的事情这段时间内,别人是无法再操作这张表的。
    乐观锁,其实不是锁,只是一种冲突的解决机制,通常是在每张表中加入一个字段,可以是version也可以是timestamp。就拿version举例,意思就是某张表不是有可能被多个用户同时操作么,那你们都去操作吧,但是每个用户操作完表后,version都会加1(在oracle数据库中version这个字段是数据库帮我们维护的),其他用户再想保存数据,数据库就会检测version字段,如果你当初你取得的version比现在数据库中的version值小于或等于,就不允许你保存,这就是乐观锁。
    缺点:比如,有个用户在界面中填写了非常多的信息,但是保存的时候出现乐观锁的问题,那么给用户的体验性就不好。