ConcurrentHashMap以ArrayList作为值

时间:2011-05-07 19:16:00

标签: java concurrency arraylist hashmap

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

1 个答案:

答案 0 :(得分:12)

是的,可能存在问题。 ConcurrentHashMap对于访问Map是线程安全的,但是所提供的列表需要是线程安全的,如果多个线程可以同时对相同的List实例进行操作。

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

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