2012-12-01 8 views
15

Quel est le paradigme ou classe d'utilité (ne peut pas sembler trouver une classe préexistante) pour implémenter un fournisseur paresseux en Java?mettre en œuvre un fournisseur paresseux en Java

Je veux avoir quelque chose qui gère le comportement de calcul-une fois/cache-plus tard et me permet de spécifier le comportement de calcul indépendamment. Je sais que cela a probablement une erreur, mais il a la sémantique droite:

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(); 
} 
+1

Ça me va bien, qu'est-ce qui vous dérange? –

+1

Je sais que la simultanéité n'est pas quelque chose que vous tripotez à moins que vous ne preniez vraiment les bonnes mesures pour vous assurer que c'est correct. –

+0

L'exemple de code présenté ici est un double verrouillage ckecked et est une mauvaise pratique comme décrit dans http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html –

Répondre

28

Ceci est déjà mis en œuvre dans la méthode Suppliers.memoize.

+1

pas étonnant que je ne trouve pas de cours, c'est une méthode statique - merci! –

Questions connexes