我需要使用 <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/