@ GuardedBy anotación con java.útil.concurrente.bloqueo.ReadWriteLock
¿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? Si el nombre del ReadWriteLock
simplemente se escribe en la anotación @GuardedBy
. ¿Alguna vez hay una razón para escribir el nombre de solo el bloqueo de lectura, o solo el bloqueo de escritura, en la anotación @GuardedBy
? ¿FindBugs u otras herramientas soportan ReadWriteLock
en @GuardedBy
?
2 answers
En el momento de escribir este artículo, @GuardedBy
no está completamente implementado por Findbugs, y es principalmente solo para documentación. (Se ha aplicado parcialmente.)
Siempre uso @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());
}
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-11-12 23:30:43
Find bugs soporta las siguientes anotaciones:
net.jcip.annotations.GuardedBy
net.jcip.annotations.Immutable
net.jcip.annotations.NotThreadSafe
net.jcip.annotations.ThreadSafe
El uso de estas anotaciones guardadas debe ser como sigue:
@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 );
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-10-25 15:24:22