Ниже bean не является потокобезопасным: метод addIfNotExist не синхронизирован, поэтому возможно, что один и тот же термин будет добавлен дважды из-за состояния гонки. Я аннотировал класс с помощью аннотации JCIP @ThreadSafe, надеясь, что FindBugs обнаружит, что реализация не является потокобезопасной, и пометит ее как ошибку, но это не так. Существуют ли какие-либо инструменты, которые идентифицируют эти типы ошибок в базе кода?
Методы addIfNotExist и isExist должны быть синхронизированы, чтобы сделать этот компонент потокобезопасным. Следует ли также синхронизировать метод isExist?
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);
}
}