обнаружение состояния гонки с помощью findbugs или другого инструмента анализа

Ниже 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);
    }
}
8
задан dsatish 6 April 2011 в 19:20
поделиться