java concurrency annotations static-analysis findbugs

@GuardedBy anotación con java.util.concurrent.locks.ReadWriteLock



concurrency annotations (2)

¿Cuál es una forma adecuada / preferida de anotar campos que están protegidos con un ReadWriteLock para que herramientas como FindBugs puedan aprovechar la anotación? En caso de que el nombre de ReadWriteLock simplemente se escriba en la anotación @GuardedBy . ¿Alguna vez hay una razón para escribir el nombre de solo el bloqueo de lectura, o simplemente el bloqueo de escritura, en la anotación @GuardedBy ? ¿FindBugs, u otras herramientas, incluso son compatibles con ReadWriteLock en @GuardedBy ?


Buscar errores admite las siguientes anotaciones:

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

El uso de estas anotaciones GuardedBy debe ser el siguiente:

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


En el momento de escribir esto, @GuardedBy no está completamente implementado por Findbugs , y es principalmente solo para documentación. (Está parcialmente implementado.)

Siempre utilizo @GuardedBy("readwritelock") o el objeto que uso para synchronize .

Por ejemplo de este último:

class Example { private Object lock = new Object(); @GuardedBy("lock") private Stuff innards = ...; public void work() { synchronized(lock) { workWith(innards.goop()); } } }