我一直在使用ConcurrentHashMap,如果我想实现以下目标.
ConcurrentModificationException,而另一个线程正在修改地图内容.有时,我enum用作密钥,从EnumMap Javadoc,我意识到,
集合视图返回的迭代器非常一致:它们永远不会抛出ConcurrentModificationException,它们可能会也可能不会显示迭代进行过程中对映射所做的任何修改的影响.
因此,我可以安全地更换
Map<Country, String> map = new ConcurrentHashMap<Country, String>();
Run Code Online (Sandbox Code Playgroud)
同
Map<Country, String> map = Collections.synchronizedMap(new EnumMap<Country, String>(Country.class));
Run Code Online (Sandbox Code Playgroud)
我知道有没有putIfAbsent在EnumMap,但这不要紧,我在这一刻,因为我并不需要它.
你不能这样做有两个原因:
Collections.synchronizedMap未同步).Iterator将被打破 - 你可以在退回后NoSuchElementException打电话.next()hasNext()true| 归档时间: |
|
| 查看次数: |
2745 次 |
| 最近记录: |