Qual è il paradigma o classe di utilità corretto (non riesco a trovare una classe preesistente) per implementare un fornitore pigro in Java?implementazione di un fornitore pigro in java
Voglio avere qualcosa che gestisca il comportamento di compute-una volta/cache-dopo e mi permetta di specificare il comportamento del calcolo in modo indipendente. So che questo è probabilmente un errore, ma ha la semantica giusti:
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();
}
Mi sembra carino, cosa ti dà fastidio? –
So che la concorrenza non è qualcosa con cui si scherza a meno che non si adottino i giusti passaggi per assicurarsi che sia corretta. –
Il codice di esempio mostrato qui è un doppio controllo ckecked ed è una cattiva pratica come descritto in http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html –