【问题标题】:Avoiding ConcurrentModificationException when serializing to Json?序列化为 Json 时避免 ConcurrentModificationException?
【发布时间】:2012-11-30 02:52:23
【问题描述】:

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

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

我们如何避免这种情况?我们是否需要总是将 Map 的深层副本传递给 Gson?在这种情况下,鉴于地图可以包含所有 Json 原语,包括List 和Map,你将如何实现所述深拷贝?

【问题讨论】:

  • 一开始你是如何控制这个 Map 的线程安全的?

标签: java json serialization concurrency


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2017-06-02
    • 2017-05-30
    • 1970-01-01
    • 1970-01-01
    • 2016-07-15
    • 2015-11-04
    • 1970-01-01
    • 2021-11-23
    • 2016-09-08
    相关资源
    最近更新 更多