我只想将Collection
用于单线程环境,而我使用的是同步的HashMap
。
但是,我仍然怀疑它是否是同步的线程安全。
答案 0 :(得分:4)
如果您只使用单个线程,则 需要一个线程安全的集合 - HashMap
应该没问题。
您应该非常小心地确定您的要求:
HashMap
(或考虑LinkedHashMap
)HashMap
仍然没问题。Collections.synchronizedMap
只会同步每个操作;它仍然不是
安全地在一个线程中迭代并在没有同步的情况下修改另一个线程中的映射。ConcurrentHashMap
是一种更“彻底”的线程安全方法,我通常更喜欢这种方法
超过synchronizedMap
。它允许在迭代期间进行修改,但不保证
在迭代时会看到这样的修改。另请注意,虽然HashMap
允许null
键和值,ConcurrentHashMap
没有。答案 1 :(得分:3)
根据您的需要,使用ConcurrentHashMap
。它允许从多个线程并发地修改Map,而无需阻止它们。 Collections.synchronizedMap(map)
会创建一个阻止Map的地图,这会降低性能,尽管确保一致性
答案 2 :(得分:3)
答案 3 :(得分:0)
常用的Collection
类(例如java.util.ArrayList
)未同步。但是,如果两个线程有可能同时更改集合,则可以使用synchronizedCollection()
方法从中生成同步集合。与只读方法类似,线程安全API允许您生成同步的集合,列表,集或映射。例如,您可以使用HashMap
:
Map map = Collections.synchronizedMap(new HashMap());
map.put(...
答案 4 :(得分:0)
作为一个单线程环境,您可以安全地使用HashMap。