RecList.java |
public class RecList { private double value; private RecList next; /** Crée une liste avec une valeur et une sous-liste. */ public RecList(double value, RecList next) { this.value = value; this.next = next; } /** Teste si cette liste contient la valeur x. Seul l'accès à la valeur courante nécessite d'être synchronisé. */ public boolean contains(double x) { synchronized (this) { if (value == x) return true; } // Accès au suivant sans synchronisation (structure constante) if (getNext()==null) return false; return getNext().contains(x); } /** Retourne la somme des éléments de la liste. Seuls les accès aux valeurs sont synchronisés. */ public double sum() { double sum = getValue(); if (getNext()!=null) sum += getNext().sum(); return sum; } /** Positionne la valeur de l'élément courant. Le type double nécessite de synchroniser. */ public synchronized void setValue(double value) { this.value = value;} /** Retourne la valeur de l'élément courant. Idem. */ public synchronized double getValue() { return value; } /** Retourne la sous-liste. L'accès à la référence est atomique et la structure est constante : pas de synchronisation. */ public RecList getNext() { return next; } }