我在多线程服务中使用FastMap shared()
。有时地图崩溃。它显示size > 1
,但是当我尝试获取一个元素时,我得到null
。我总是只获得第一个位置的元素,其他元素是null
。我尝试获取value()
,但也只获得一个元素size > 1
。
任何解决方案?或者也许使用其他地图?
关于服务:在地图上我保持连接到套接字用户。几个线程可以读取或写入映射。我需要线程安全的地图。 FastMap工作完美,直到崩溃。它随机崩溃。它可以工作1周或1小时。
答案 0 :(得分:0)
有时地图崩溃。它显示尺寸> 1,但是当我尝试获取一个元素时,我得到null。
要真正回答这个问题,您将不得不提供有关该问题的更多详细信息,并可能提供一些代码示例。具体来说,您应该提供您所看到的例外情况。
一个可能的问题是,尽管您使用new FastMap<Foo, Bar>().shared()
,但要意识到这并不能完全保护您免受代码中的竞争条件的影响,这一点非常重要。如果您正在执行以下操作,那么它将解释您所看到的内容:
// even though this shows stuff in the map
if (map.size() > 0) {
// by the time we get here, it might have been removed so this throws
entry = map.entrySet().iterator().next();
}
您的代码需要考虑多个线程(我假设)在地图中添加和删除,因此如果您在地图上执行两项操作,地图的状态可能会在它们之间发生变化。
希望这会有所帮助。如果您在问题中添加更多详细信息,我们应该能够提供更具体的帮助。