40 votes

Annotation @GuardedBy avec java.util.concurrent.locks.ReadWriteLock

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 ?

33voto

Michael Deardeuff Points 3425

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());
        }
    }        
}
 

1voto

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 ); 
    }  

}  
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X