Document
タイプのプライベートメンバーをMap<String, Object>
ストレージとして使用するクラスがあります。このタイプのオブジェクトはメモリに保持され、(非常に頻繁に)複数のスレッドによって(潜在的に)変更されます。また、これらのオブジェクト(または具体的には基盤となるマップ)が要求に応じてHTTP経由でシリアル化されることもあります。シリアル化形式はJsonであり、使用中のライブラリは現在Googleのものです。Gson
新しいものを導入する変更としてシリアル化が同時に発生すると、が表示されMap.Entry
ますConcurrentModificationExceptions
。Gsonはおそらく変更されているものを反復処理しているため、これは直感的に非常に理にかなってentrySet
います。
どうすればこれを回避できますか?マップの深いコピーを常にGsonに渡すことに頼る必要がありますか?その場合、マップにとを含むすべてのJsonプリミティブを含めることができるとすると、上記のディープコピーをどのように実装しますList
かMap
?