【问题标题】:ConcurrentHashMap operationsConcurrentHashMap 操作
【发布时间】:2014-02-06 09:58:01
【问题描述】:

以下是 ConcurrentHashMap 的 java 文档中的一些行

此类遵循与 Hashtable 相同的功能规范,并且 包括对应于每个方法的方法版本 哈希表。然而,即使所有操作都是线程安全的, 检索操作不需要锁定,并且没有任何 支持锁定整个表,以防止所有 访问。

语句的含义是什么

虽然所有操作都是线程安全的

从上面的段落? 任何人都可以用 put() 或 get() 方法的任何示例来解释吗?

【问题讨论】:

  • 你想向你解释线程安全吗?
  • 是的,我想向我解释线程安全,但在这种情况下,关于 get() 和 put()。
  • get() 和 put() 没有什么特别之处。它们是两个线程安全的操作。
  • 这就是我想问的,当我们说它们是两个线程安全的操作时是什么意思。
  • 试过谷歌了吗?这是一个链接:stackoverflow.com/questions/261683/…

标签: java collections


【解决方案1】:

ConcurrentHashMap 允许从多个线程同时修改 Map 而无需阻塞它们。 Collections.synchronizedMap(map) 创建一个阻塞的 Map 会降低性能,尽管可以确保一致性(如果使用得当的话)。

如果您需要确保数据一致性,并且每个线程都需要拥有最新的地图视图,请使用第二个选项。如果性能很关键,则使用第一个,并且每个线程只将数据插入到映射中,读取发生的频率较低。

【讨论】:

  • 它有帮助吗?
  • 你的回答清楚了一些观点,但它没有回答我的问题。
  • 这就是我能提供的所有帮助,我希望还有更多,抱歉。
【解决方案2】:

你的问题很奇怪。如果您了解“线程安全”的含义,那么您将能够自行理解它如何应用于 get() 和 put() 。如果您不了解线程安全,那么就没有必要专门针对 get() 和 put() 进行解释。你确定这不是作业题吗?

但是,无论如何回答您的问题,ConcurrentHashMap 是线程安全的这一事实意味着,如果您有多个线程同时在同一个映射上执行 put(),那么:a) 内部数据不会发生损坏地图的结构和: b) 其他一些执行 get() 的线程将看到其他线程输入的所有值。对于像 HashMap 这样的非线程安全 Map,这些都不能保证。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-06
    • 2017-03-05
    • 2021-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-16
    • 1970-01-01
    相关资源
    最近更新 更多