package de.invesdwin.util.concurrent;
import java.util.concurrent.Callable;
import javax.annotation.concurrent.ThreadSafe;
@ThreadSafe
public abstract class ACachedCallable<E> implements Callable<E> {
private E cached;
@Override
public synchronized E call() {
if (cached == null) {
cached = innerCall();
}
return cached;
}
protected abstract E innerCall();
}