【发布时间】:2016-01-16 09:19:18
【问题描述】:
系统中有两个线程。一个是读取线程,另一个是写入线程。
使用以下代码同步地图。
Map<String,ArrayList<String>> m = Collections.synchronizedMap(new HashMap<String,ArrayList<String>())
读取线程获取映射值的迭代器,同时写入线程修改映射。
那么,我的问题是迭代器会抛出ConcurrentModificationException吗?
【问题讨论】:
-
如何修改地图?您没有保留对它的引用。
-
嗯,我要设计一个系统。我正在考虑使用 ReadWriteLock。这就是为什么我想探索所有可能的场景。
-
您问题中的代码是 100% 线程安全的,因为无法修改地图 - 没有直接引用地图。
-
@Bohemian,同步视图不是不可变的。只需调用
m.put(String, List);即可修改底层地图
标签: java dictionary iterator synchronized concurrentmodification