问题描述
环境是Java的Mina框架建立的服务端,通过构造了一个单例类SessionDatas来存储玩家的数据。publicclassSessionDatas{privateMaproles;privatestaticSessionDatasm_instance=null;privateSessionDatas(){users=newConcurrentHashMap();}publicstaticSessionDatasgetInstance(){synchronized(SessionDatas.class){if(m_instance==null){m_instance=newSessionDatas();}returnm_instance;}}}如上情况属于线程安全的map,实际情况是:玩家链接成功是添加到该map中,然后其他的地方进行调用。但是经常在调用的地方取不到对应的key。使用方式是:getInstance().getRoles.contains(key);.get(key);为什么呢?是还要做什么同步还是要怎样呢?
解决方案
解决方案二:
Key的類型是什麼?確定Key值存在?
解决方案三:
确定key存在key是string类型的在put的地方有进行打印信息可以看到map的size变化和打印了contains判定的结果为true到了使用的地方size则对不上号,也找到那个key。
解决方案四:
自己顶起来需要其他代码段吗大哥大姐们~~
解决方案五:
我也是同样的问题,用Mina2写了一个聊天程序。在业务逻辑处理类中,定义了一个静态ConcurrentHashMap,有用户登录的时候,将他的IoSession保存在map中。当我在另一个类中,静态访问map去get的时候,有时候能get到,有时候则为null。ConcurrentHashMap不是线程安全的吗,为什么会出现这种情况呢?