ConcurrentHashMap以ArrayList作为值

Mos*_*she 6 java concurrency arraylist hashmap

我需要使用<String, ArrayList<String>>将由几个不同线程访问的表单的HashMap .根据我的设法理解,ConcurrentHashMap是首选方法.但是,地图的值是否为ArrayList会有任何问题吗?我是否必须将值定义为同步ArrayList或类似的东西?

hvg*_*des 12

是的,可能有问题.ConcurrentHashMap对于访问Map是线程安全的,但是如果多个线程可以同时在同一个List实例上运行,则所提供的列表需要是线程安全的.

如果是真的,请使用线程安全列表.

编辑 - 现在我想到了,兔子洞进一步发展.你有你的地图,你有你的列表,你有列表中的对象.多线程可以修改的任何内容都应该是线程安全的.因此,如果许多线程可以修改列表中的Map,Lists和Objects,那么所有这些线程都应该具有线程安全保护.如果只能同时修改Map和List实例,则只需要线程安全.如果多个线程可以读取所有内容,但不能修改,那么您不需要任何线程安全(我想,如果这是错误的话,有人会纠正我)