【发布时间】:2018-11-10 15:56:18
【问题描述】:
给定一个ConcurrentHashMap<String, String> 包含以下条目:
this.map = new ConcurrentHashMap<>();
this.map.put("user", "user description");
this.map.put("session", "session description");
this.map.put("test", "test description");
地图被多个线程访问。
如何以原子方式删除除session 之外的所有键?
在没有竞争条件的情况下,这段代码会按我的预期工作吗? forEach 方法是原子的吗?有没有其他方法可以原子地实现这一点?
map.forEach((key, value) -> {
if (!key.equals("session")) {
map.remove(key);
}
});
【问题讨论】:
-
我猜
.equals("session)是错字?而且您的实际代码确实有一个结束"? -
@Mark,是的,这是错字,而我的实际代码包含“。”。
-
“session”关联的值可以被其他线程修改吗?地图中是否总会有一个“会话”键?
-
@arshajii 不,与“会话”关联的值永远不会改变,但可以修改所有其他键。是的,会话始终存在于地图中。
-
好的,在这种情况下,请查看下面的答案。
标签: java concurrency atomic concurrenthashmap