mirror of
https://github.com/apache/commons-lang.git
synced 2025-02-09 11:34:55 +00:00
Use Java 8 API ConcurrentMap#computeIfAbsent().
This commit is contained in:
parent
4a5ef835cc
commit
cb6676b1bb
@ -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) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user