多个 Java 类实例同时读取同一个 Map 是否存在线程安全问题?

cbe*_*der 0 java thread-safety

我有一个Map<Sting, List<Object>>可以从多个 Java 类实例访问的。这Map有时会由单独的线程偶尔更新。实例永远不会写入任何对象。他们只是获取Lists 之一并读取其中的对象。

我应该为此担心线程安全吗?只有一个线程在写。

Mur*_*nik 5

一句话—​​—是的。

根据实现,put对 a 的 ingMap可以改变其内部结构,这可能导致并发get操作具有未定义的行为(例如,对于HashMaps,我见过get如果put中间“中断”它就永远不会返回的情况)。

您应该使用Map线程安全的实现,例如ConcurrentHashMap.