微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

并发哈希映射案例在同一段上读写

如何解决并发哈希映射案例在同一段上读写

我只想知道如果读写线程访问 ConcurrentHashMap 的同一段会发生什么。

  • 情况 1:当读取器线程首先读取值时。
  • 情况 2:当写入线程更新值而读取线程获取值时。

解决方法

来自 JavaDocs(您可以搜索您的特定版本,但怀疑此行为是否会改变):

检索操作(包括get)一般不会阻塞,所以可能 与更新操作(包括放置和删除)重叠。检索 反映最近完成的更新操作的结果 坚持他们的发作。 (更正式地说,一个更新操作 给定的键与任何(非空)有一个发生之前的关系 检索该键报告更新的值。)对于聚合 putAll 和 clear 等操作,并发检索可能反映 仅插入或删除部分条目。

适用于您的问题:

case 1: 当读取器线程先读取值时。

  • 读者将在即将进行的看跌期权之前读取最近的看跌期权价值。

情况二:写线程更新值,读线程获取值。

  • 编写器将执行更新。如果它在 .get() 之前在内部完成了它的放置,那么新的 get 将被检索。否则, .get() 将看不到更新,并将放置“案例 1”会说的任何内容,即好像同时发生的那个不是 .put()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。