4

DocumentタイプのプライベートメンバーをMap<String, Object>ストレージとして使用するクラスがあります。このタイプのオブジェクトはメモリに保持され、(非常に頻繁に)複数のスレッドによって(潜在的に)変更されます。また、これらのオブジェクト(または具体的には基盤となるマップ)が要求に応じてHTTP経由でシリアル化されることもあります。シリアル化形式はJsonであり、使用中のライブラリは現在Googleのものです。Gson

新しいものを導入する変更としてシリアル化が同時に発生すると、が表示されMap.EntryますConcurrentModificationExceptions。Gsonはおそらく変更されているものを反復処理しているため、これは直感的に非常に理にかなってentrySetいます。

どうすればこれを回避できますか?マップの深いコピーを常にGsonに渡すことに頼る必要がありますか?その場合、マップにとを含むすべてのJsonプリミティブを含めることができるとすると、上記のディープコピーをどのように実装しますListMap

4

1 に答える 1

4

頻繁に更新されるオブジェクトをシリアル化する方法については疑問がありますが、ConcurrentHashMapを使用すると、少なくとも同時実行の問題が軽減されるはずです。

于 2012-11-30T03:21:28.257 に答える