Quelle est la manière appropriée / préférée d'annoter des champs protégés par un ReadWriteLock
afin que des outils comme FindBugs puissent tirer parti de l'annotation? Le nom du ReadWriteLock
simplement être écrit dans l'annotation @GuardedBy
. Y a-t-il jamais une raison d'écrire le nom du verrou de lecture ou du verrou d'écriture dans l'annotation @GuardedBy
? FindBugs ou d'autres outils prennent-ils même en charge ReadWriteLock
dans @GuardedBy
?
Réponses
Trop de publicités? Au moment d'écrire ces lignes, @GuardedBy
n'est pas entièrement implémenté par Findbugs , et est principalement destiné à la documentation. (Il est partiellement mis en œuvre.)
J'utilise toujours @GuardedBy("readwritelock")
ou l'objet que j'utilise pour synchronize
.
Par exemple de ce dernier:
class Example {
private Object lock = new Object();
@GuardedBy("lock")
private Stuff innards = ...;
public void work() {
synchronized(lock) {
workWith(innards.goop());
}
}
}
mark borg
Points
115
Find bugs prend en charge les annotations suivantes:
net.jcip.annotations.GuardedBy
net.jcip.annotations.Immutable
net.jcip.annotations.NotThreadSafe
net.jcip.annotations.ThreadSafe
L'utilisation de ces annotations GuardedBy doit être la suivante:
@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 );
}
}