软件开发并发性问题的解决方案



软件开发并发性问题的解决方案

电子商务后台管理,有多个客服人员可以操作同一个数据,当有的人正在对他进行修改的时候,其他人却觉得这个数据是垃圾数据,就直接删除了
这个问题在开发中是比较常见到的问题。

个人的解决方案如下:

如果系统不是集群,用的人也不多, 可以这样处理,首先 系统只需要加入一个过滤器servlet,你的系统的所有业务 的jsp、.do之类的请求由这个servlet过滤。如果是你的查询单一订单的页面请求就加锁,如果是其他页面就解锁。
现在详细说说怎么加锁、解锁。这个过滤器里面就只需要 管理两个静态hashmap,其中一个以订单id作为key,员工id作为value,另一个相反。如果员工进入到打开订单页面,首先查看两个map是否 当前订单被锁,如果有就直接跳到其他页面,如果没有 过滤器就把员工id和当前查询出来的订单id,分别作为key和value放入这两个map中。如果员工在其他页面,过滤器就先查询当前员工id是否锁有 订单,没有就继续,有就删除两个map里这个员工和它曾经锁住的订单id。

我觉得这个方法比加乐观锁和悲观锁的方式都要强,你只需要添加一个过滤器并配置它。
如果想做得更友好一些,就在你的订单列表页面查询显示前,遍历你的map锁,看当前页面的 订单是否已经有人锁定,展示的时候分别表示。
这样做的好处是,如果十个客服要处理十张订单,而且任何人都有权利处理任何一张订单,当十个客服几乎同时打开列表页,能看到哪些已经被锁定,哪些还没有,最倒霉的那个人最多也就几次就能打开一张没有锁定的订单进行处理了。