Каков правильный/предпочтительный способ аннотировать поля, защищенные с помощью ReadWriteLock
, чтобы инструменты, такие как FindBugs, могли использовать аннотацию? Если имя ReadWriteLock
просто должно быть записано в аннотации @GuardedBy
. Есть ли причина, чтобы написать имя только блокировки чтения или просто блокировки записи в аннотации @GuardedBy
? Есть ли FindBugs или другие инструменты, даже поддерживают ReadWriteLock
в @GuardedBy
?
@GuardedBy аннотация с java.util.concurrent.locks.ReadWriteLock
Ответ 1
На момент написания этой статьи @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
Поиск ошибок поддерживает следующие аннотации:
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 );
}
}