Below bean no es seguro para subprocesos: el método addIfNotExist no está sincronizado, por lo que es posible que el mismo término se agregue dos veces debido a la condición de raza. Anoté la clase usando la anotación JCIP @ThreadSafe esperando que FindBugs encuentre que la implementación no es segura para subprocesos y la marque como un error, pero no lo es. ¿Hay alguna herramienta que identifique este tipo de errores en la base de códigos?detección de condición de carrera utilizando findbugs u otra herramienta de análisis
Los métodos addIfNotExist e isExist deben estar sincronizados para que este bean sea seguro para subprocesos. ¿Debería el método isExist también estar sincronizado?
package com.test;
import java.util.ArrayList;
import java.util.Collection;
import net.jcip.annotations.GuardedBy;
import net.jcip.annotations.ThreadSafe;
@ThreadSafe
public class Dictionary {
@GuardedBy("this")
public Collection<String> terms = new ArrayList<String>();
public void addIfNotExist(final String input) {
if (!this.terms.contains(input)) {
this.terms.add(input);
}
}
public boolean isExist(final String input){
return this.terms.contains(input);
}
public void remove(final String input){
this.terms.remove(input);
}
}
Gracias por su respuesta -. su razonamiento sobre por qué isExists deben estar sincronizados tiene sentido – dsatish