java - 有没有更好的方法来确定 computeIfAbsent 是否返回了新值?

标签 java concurrenthashmap

我有这样的代码:

ConcurrentMap<String, String> map = new ConcurrentHashMap<>();
AtomicBoolean isNew = new AtomicBoolean(false);
String result = map.computeIfAbsent("foo", key -> {
    isNew.set(true);
    return "bar";
});
result = result + "common op that occurs on both old and new results";
if (isNew.get()) {
    // op that occurs only on new results.  Must occur after common op.
}

鉴于我的计算方法足够重,我不想创建并立即丢弃不需要的计算值,是否有更漂亮的方法来做到这一点?

编辑:我也担心我的代码将如何处理线程。如果 2 个线程尝试计算同一个键,我认为它们最终可能都报告 isNew 为 true。

最佳答案

您可以在 computeIfAbsent 中使用逻辑lambda - 只有在必须计算新值时才会执行它:

String result = map.computeIfAbsent("foo", key -> {
    // do special stuff here
    return "bar";
});

关于java - 有没有更好的方法来确定 computeIfAbsent 是否返回了新值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61028964/

相关文章:

java - 在这种情况下,是否有可能与 ConcurrentHashMap 陷入僵局?

java - ConcurrentHashMap 锁定

java - 当队列持久时,HornetQ Producer 变慢

java - 在 Spring Batch 中,如何一个接一个地运行 2 个选择查询,我必须将第一个查询结果传递给第二个查询

java - 增加我在 Google App Engine 上所有应用程序 ID 的电子邮件配额

java ConcurrentHashMap 以构造函数为键

java - 任意键的锁定处理程序

java - 根据某些事件的时间组织时间表的算法?

类 pat 上的 java.lang.IllegalStateException : Detected both log4j-over-slf4j. jar 和 slf4j-log4j12.jar

java - JDK 1.6 和 JDK 1.7 中 ConcurrentHashMap 的不同 `next` 条目