序列化为Json时避免ConcurrentModificationException?

时间:2012-11-30 02:52:23

标签: java json serialization concurrency

我们有一个类Document,它使用Map<String, Object>类型的私有成员作为存储。这种类型的对象保存在内存中,并且(非常频繁地)由(可能)多个线程修改。还会发生这些对象(或者,特别是底层映射)在请求时通过HTTP序列化。序列化格式为Json,正在使用的库目前是Google的Gson

当序列化作为引入新Map.Entry的修改同时发生时,我们会看到ConcurrentModificationExceptions。这很直观,因为Gson可能会迭代正在修改的entrySet

我们怎样才能避免这种情况?我们是否需要总是将地图的深层副本传递给Gson?在这种情况下,如果地图可以包含所有Json原语,包括ListMap,您将如何实现所述深层副本?

1 个答案:

答案 0 :(得分:3)

虽然我质疑序列化经常更新的对象的智慧,但使用ConcurrentHashMap至少应该可以减轻并发问题。