У меня есть такой код:
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.
}
Есть ли более красивый способ сделать это, учитывая, что мой метод вычислений достаточно тяжел, что я не хочу создавать, и сразу же отбрасываю вычисленные значения если они не нужны?
Редактировать: Меня также беспокоит, насколько хорошо мой код справится с многопоточностью. Если два потока пытаются вычислить для одного и того же ключа, я думаю, что оба они в конечном итоге сообщат об истине для isNew.