面临问题
最近一直在忙于新游戏的逻辑开发,在开发过程中发现很多地方都需要用到锁,比如操作背包,用户钱币,用户状态修改等,在以往的实现上大部开发人员都是奖这些操作归结到各个独立的模块中,然后在相应的功能上做一个synchronized或者lock,当然这种做法不是不可以,但从全局上考虑,这种做法似乎有些不太合理,这就如同直接将事务加在dao的curd上,而实际开发中这种事务基本上起不到任何作用,毕竟脱离了业务逻辑的事务没有任何意义.所以我们也需要将锁定的操作扩展到对应的业务功能上.我们先梳理下我们目前的需求,即需要支持对特定的一个或者多个对象的锁定与解锁,你会如何设计这种锁呢?
设计实现
首先定义一下需要实现的方法,根据不同的需要锁定的对象返回List,我们暂时用ChainLock来封装List,代码如下
1 2 3 4 5 6 7 |
public class LockUtils { public static ChainLock getChainLock(Object... objects) { // todo 根据objects返回ChainLock } } |
有了ChainLock后,我们自然需要定义相应的lock与unlock方法
1 2 3 4 5 6 7 8 9 10 11 |
public class ChainLock { public void lock() { // todo 锁定方法 } public void unlock() { // todo 解锁方法 } } |