java - 以 ArrayList 为值的 ConcurrentHashMap

标签 java concurrency arraylist hashmap

我需要使用 <String, ArrayList<String>> 形式的 HashMap那将是 由几个不同的线程访问。据我了解,ConcurrentHashMap 是首选方法。但是map的值是ArrayList会不会有什么问题呢?我是否必须将值定义为同步的 ArrayList 或类似的东西?

最佳答案

是的,可能会有问题。 ConcurrentHashMap 对于访问 Map 是线程安全的,但是提供的 List 需要是线程安全的,如果多个线程可以同时操作同一个 List 实例。

如果这是真的,那么使用一个线程安全的列表。

编辑——现在我想起来了,兔子洞走得更远了。你有你的 map ,你有你的列表,你有列表中的对象。多线程可以修改的任何东西都应该是线程安全的。因此,如果许多线程可以修改 Map、Lists 和 Lists 中的 Objects,那么所有这些都应该有线程安全保护。如果只有 Map 和 List 实例可以并发修改,那么只有它们需要线程安全。如果多个线程可以读取所有内容,但不能修改,那么你不需要任何线程安全(我想,如果这是错误的,有人会纠正我)

关于java - 以 ArrayList 为值的 ConcurrentHashMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5923405/

相关文章:

java - 使用 OWL API 检索 OWL 类限制

java - JFreeChart导入错误

并发队列推送函数的 C++ 返回值

java - 从字符串 : gives outofmemoryerror for StringBuilder. 的 Arraylist 追加创建最大 4mb 的大字符串

c# - 如何在 C# 中从 SQL 设置数据动态数组

java - 无法使 SHA1 在 Android java 中正常工作

java - 为什么我必须添加父 pom 的依赖项?

java - 启动多个线程并在所有子线程完成后在父线程上运行 callabck 的非阻塞方法

c++ - 生产者完成后通知消费者的优雅方式?

java - 从字符串创建嵌套的 ArrayList