ConcurrentHashMap操作

时间:2014-02-06 09:58:01

标签: java collections

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

  

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

声明的含义是什么

  

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

从上面? 任何人都可以解释任何put()或get()方法的例子吗?

2 个答案:

答案 0 :(得分:1)

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

如果需要确保数据一致性,请使用第二个选项,并且每个线程都需要具有最新的地图视图。如果性能至关重要,请使用第一个,并且每个线程仅将数据插入到地图中,读取的频率会降低。

答案 1 :(得分:0)

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

然而,无论如何回答你的问题,ConcurrentHashMap是线程安全的这一事实意味着如果你有几个线程同时在同一个地图上执行put(),那么:a)内部数据不会受到损害map的结构和:b)执行get()的其他一些线程将看到其他线程放入的所有值。使用非线程安全的映射(例如HashMap)都不能保证。