下面是ConcurrentHashMap的java文档中的一些行
该类遵循与Hashtable相同的功能规范,并包含对应于Hashtable的每个方法的方法的版本。然而,即使所有操作都是线程安全的,检索操作也不需要锁定,也不支持以阻止所有访问的方式锁定整个表。
这句话的意思是什么?
尽管所有操作都是线程安全的。
从上面的段落?有人能用put()或get()方法的任何例子来解释吗?
发布于 2014-02-06 10:02:12
ConcurrentHashMap允许从多个线程并发修改Map,而不需要阻止它们。Collections.synchronizedMap(地图)创建了一个阻塞映射,它将降低性能,但确保一致性(如果使用得当)。
如果您需要确保数据的一致性,并且每个线程都需要有一个最新的地图视图,请使用第二个选项。使用第一个如果性能非常关键的话,并且每个线程只将数据插入到映射中,并且读取发生的频率较低。
发布于 2014-02-06 16:55:11
你的问题很奇怪。如果您理解“线程安全”意味着什么,那么您将能够理解它如何应用于get()和put()。如果您不了解线程安全,那么就没有必要专门针对get()和put()来解释它。你确定这不是家庭作业问题吗?
但是,无论如何,在回答您的问题时,ConcurrentHashMap是线程安全的这一事实意味着,如果有多个线程同时在同一个映射上执行put()s,那么: a)映射的内部数据结构不会受到损害,并且: b)执行get()的其他线程将看到其他线程输入的所有值。使用非线程安全映射(如HashMap ),这两个映射都没有得到保证。
https://stackoverflow.com/questions/21599450
复制相似问题