ComputeIfAbsent抛出concurrentModificationException

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (12)

我有一个Hashmap,我在其中维护不同类型的读者到各自的java类实现的映射。我有一个多线程Java服务器,支持32种类型的读者。

您可以假设每30秒,getReader()在内部被每种类型的读取器的1000个对象调用。

每当我将刷新时间减少到20秒时,它会偶尔为某些读者抛出ConcurrentModificationException。这是预期的吗?

减少时间段会有什么不同?

class Mapper {
    Map<String, Reader> READER = new HashMap<>();

    public static Reader getReader(type) {
        Reader reader = READER.computeIfAbsent(type, k -> new ReaderImpl());
    }
}

提问于
用户回答回答于

这是预期的吗?

正如它在Javadoc中HashMap所说的那样(强调他们的):

请注意,此实现不同步。 如果多个线程同时访问哈希映射,并且至少有一个线程在结构上修改了映射,则必须在外部进行同步。(结构修改是添加或删除一个或多个映射的任何操作;仅更改与实例已包含的键关联的值不是结构修改。)

ConcurrentModificiationException具体是否预期而言,不知道。应该期待的是行为是不确定的

如果你很幸运,会发生异常。例外是好的:他们告诉你你做错了什么。如果你不那么幸运,它会默默地失败。谁知道在您的具体情况下会发生什么?也许它会正常工作,也许它不会。

如果希望代码行为正确,请使用记录的类。

热门问答

急急急!!核验图片验证码填写到接入备案企业侧备案系统中,在哪操作啊?

无聊至极互联网重度用户
推荐
你反馈的上海备案的APP核验验证码吗?如果是的话,提交订单的时候直接写验证码就可以的。 在补充材料的下面 image.png ... 展开详请

存储桶和项目概念?

Hyman.W

腾讯云 · 高级产品经理 (已认证)

推荐
一个存储桶对应多个项目的管理方式,可以使用 “标签” 来管理, 在创建存储桶或者修改存储桶配置的页面可以添加。 参考: 1,存储桶标签使用 https://cloud.tencent.com/document/product/436/34830 2,如果需要通过外部系统来管理...... 展开详请

智能钛能处理大数据文件吗?我有30G的数据存储在本地电脑硬盘上?

腾讯智能钛AI开发者

腾讯云 · 智能钛产品团队 (已认证)

腾讯智能钛产品团队官方运营账号。分享产品最新动态,第一时间解答用户疑问。
推荐

硬盘可以升级吗?

最爱开车啦互联网的敏感者
推荐

可以升级,小微活动中没有云硬盘的的,后续可以用同帐号在官网购买和服务器同地域同地区的云硬盘挂载到服务器上使用。

云硬盘挂载初始化方法 可参考 https://cloud.tencent.com/document/product/362/6735

云通信 70402 错误?

推荐已采纳

参数非法,请检查必填字段是否填充,或者字段的填充是否满足协议要求。

您好,可参考此文档:https://cloud.tencent.com/document/product/269/1671

录音识别sdk的录音文件如何保存?

Richel码农
推荐

1.实时语音sdk内置录音器采集音频暂不支持保存语音数据,如需要保存语音数据建议上层自行采集音频数据。

2.实时语音识别sdk不支持暂停&继续操作,停止识别后重新调用start即开始识别。

扫码关注云+社区

领取腾讯云代金券