Use Java 8 API ConcurrentMap#computeIfAbsent().

This commit is contained in:
Gary Gregory 2022-03-20 13:49:09 -04:00
parent 4a5ef835cc
commit cb6676b1bb

View File

@ -112,16 +112,11 @@ public Memoizer(final Computable<I, O> computable, final boolean recalculate) {
@Override
public O compute(final I arg) throws InterruptedException {
while (true) {
Future<O> future = cache.get(arg);
if (future == null) {
Future<O> future = cache.computeIfAbsent(arg, k -> {
final FutureTask<O> 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) {