diff --git a/src/main/java/org/apache/commons/lang3/concurrent/Memoizer.java b/src/main/java/org/apache/commons/lang3/concurrent/Memoizer.java index 4dacac0eb..ab3feead9 100644 --- a/src/main/java/org/apache/commons/lang3/concurrent/Memoizer.java +++ b/src/main/java/org/apache/commons/lang3/concurrent/Memoizer.java @@ -112,16 +112,11 @@ public Memoizer(final Computable computable, final boolean recalculate) { @Override public O compute(final I arg) throws InterruptedException { while (true) { - Future future = cache.get(arg); - if (future == null) { + Future future = cache.computeIfAbsent(arg, k -> { final FutureTask futureTask = new FutureTask<>(() -> computable.compute(arg)); - future = cache.putIfAbsent(arg, futureTask); - if (future == null) { - future = futureTask; - futureTask.run(); - } - } - + futureTask.run(); + return futureTask; + }); try { return future.get(); } catch (final CancellationException e) {