我们有一个类Document
,它使用Map<String, Object>
类型的私有成员作为存储。这种类型的对象保存在内存中,并且(非常频繁地)由(可能)多个线程修改。还会发生这些对象(或者,特别是底层映射)在请求时通过HTTP序列化。序列化格式为Json,正在使用的库目前是Google的Gson
当序列化作为引入新Map.Entry
的修改同时发生时,我们会看到ConcurrentModificationExceptions
。这很直观,因为Gson可能会迭代正在修改的entrySet
。
我们怎样才能避免这种情况?我们是否需要总是将地图的深层副本传递给Gson?在这种情况下,如果地图可以包含所有Json原语,包括List
和Map
,您将如何实现所述深层副本?