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