mirror of
https://github.com/apache/commons-lang.git
synced 2025-02-10 03:55:10 +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
|
@Override
|
||||||
public O compute(final I arg) throws InterruptedException {
|
public O compute(final I arg) throws InterruptedException {
|
||||||
while (true) {
|
while (true) {
|
||||||
Future<O> future = cache.get(arg);
|
Future<O> future = cache.computeIfAbsent(arg, k -> {
|
||||||
if (future == null) {
|
|
||||||
final FutureTask<O> futureTask = new FutureTask<>(() -> computable.compute(arg));
|
final FutureTask<O> futureTask = new FutureTask<>(() -> computable.compute(arg));
|
||||||
future = cache.putIfAbsent(arg, futureTask);
|
futureTask.run();
|
||||||
if (future == null) {
|
return futureTask;
|
||||||
future = futureTask;
|
});
|
||||||
futureTask.run();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
return future.get();
|
return future.get();
|
||||||
} catch (final CancellationException e) {
|
} catch (final CancellationException e) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user