Каков правильный парадигм или класс полезности (похоже, не может найти существующий класс) для реализации ленивого поставщика в Java?
Я хочу иметь что-то, что обрабатывает поведение compute-once/cache-later и позволяет мне самостоятельно определять поведение вычислений. Я знаю, что это, вероятно, имеет ошибку, но имеет правильную семантику:
abstract public class LazySupplier<T> implements Supplier<T>
{
private volatile T t;
final private Object lock = new Object();
final public T get() {
if (t == null)
{
synchronized(lock)
{
if (t == null)
t = compute();
}
}
return t;
}
abstract protected T compute();
}