@GuardedBy аннотация с java.util.concurrent.locks.ReadWriteLock - PullRequest
38 голосов
/ 19 октября 2011

Какой правильный / предпочтительный способ аннотировать поля, защищенные ReadWriteLock, чтобы такие инструменты, как FindBugs, могли использовать аннотацию? Если имя ReadWriteLock просто записать в аннотации @GuardedBy. Есть ли причина писать имя только блокировки чтения или блокировки записи в аннотации @GuardedBy? Поддерживает ли FindBugs или другие инструменты ReadWriteLock в @GuardedBy?

Ответы [ 2 ]

31 голосов
/ 13 ноября 2011

На момент написания этой статьи @GuardedBy не полностью реализован Findbugs , и в основном предназначен только для документации. (Это частично реализовано.)

Я всегда использую @GuardedBy("readwritelock") или объект, который я использую для synchronize.

Например, последний:

class Example {
    private Object lock = new Object();

    @GuardedBy("lock")
    private Stuff innards = ...;

    public void work() {
        synchronized(lock) {
            workWith(innards.goop());
        }
    }        
}
2 голосов
/ 25 октября 2011

Поиск ошибок поддерживает следующие аннотации:

net.jcip.annotations.GuardedBy
net.jcip.annotations.Immutable
net.jcip.annotations.NotThreadSafe
net.jcip.annotations.ThreadSafe

Использование этих комментариев GuardedBy должно быть следующим:

@ThreadSafe  
public class Queue<E> implements java.util.Queue<E>  
{  
    private ConcurrentLinkedQueue readWriteLock;  

    @GuardedBy( value="readWriteLock" )  
    public boolean offer(E o)  
    {  
        return queue.offer( o ); 
    }  

}  
...