关于提高共享数据并发问题

15-01-06 zld406504302
         

目前开发中遇到一个问题,我简单描述一下,请高手赐教。

一个斗地主的棋牌游戏,3个玩家凑足一个牌桌,并开始游戏,游戏结束后离开牌桌。我现在的问题出现在玩家加入游戏,如何分配牌桌上。

我的实现思路是这样的,初始化一个Map<tableId,Table> 存放牌桌,当有玩家加入,给map加锁。如果map为空,则创建一个牌桌;如果map不为空,则遍历map找到不足3个人的牌桌;如果牌桌都是满的,则创建新牌桌。创建新牌桌,或者找到不足3人的牌桌后,将当前玩家放入牌桌中。新创建的牌桌放到map中。

当并发加入量达到2000以上时,就会发现很卡。还请高手给提一些建议。

         

banq
2015-01-07 10:44

2015-01-06 22:56 "@zld406504302"的内容
初始化一个Map 存放牌桌 ...

所有的牌桌都共享一个MAP吗?如果因为一个牌桌给整个Map上锁是否堵塞其他牌桌?

zld406504302
2015-01-07 12:39

只是玩家加入游戏时做了map同步,防止多个玩家创建多个牌桌。当玩家加入到牌桌后,玩家行为不会再征用这个map上的锁了。

zld406504302
2015-01-07 13:23

2015-01-07 10:44 "@banq"的内容
所有的牌桌都共享一个MAP吗? ...

是我对问题描述的不够清楚,实际这个map 只是在玩家加入时会操作这个map,当玩家创建一个牌桌后,也会将创建的牌桌放到另一个map<userid,table>中,这个map是玩家加入牌桌后利用到的,这个map上是没有锁的。

lltime
2015-01-13 10:25

把map换成concurrenthashmap,可部分解决你的问题