¿Cuál es la forma correcta/preferida de anotar los campos que están protegidos con un ReadWriteLock
para que las herramientas como FindBugs puedan aprovechar la anotación? Debe el nombre del ReadWriteLock
simplemente escribirse en la anotación @GuardedBy
. ¿Alguna vez hay una razón para escribir el nombre del solo bloqueo de lectura, o simplemente el bloqueo de escritura, en la anotación @GuardedBy
? ¿FindBugs u otras herramientas, incluso admiten ReadWriteLock
en @GuardedBy
?@GuardedBy anotación con java.util.concurrent.locks.ReadWriteLock
Respuesta
En el momento de escribir estas líneas, @GuardedBy
isn't fully implemented by Findbugs, y es más que nada para documentación. (Es parcialmente implementarse.)
siempre uso @GuardedBy("readwritelock")
o el objeto que utilizo 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());
}
}
}
encontrar errores es compatible con las siguientes anotaciones:
net.jcip.annotations.GuardedBy
net.jcip.annotations.Immutable
net.jcip.annotations.NotThreadSafe
net.jcip.annotations.ThreadSafe
uso de estos anotación 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);
}
}
Estas anotaciones también son capturados en JSR305. Se pueden ver en esta implementación de referencia: http://code.google.com/p/jsr-305/source/browse/trunk/ri/src/main/java/javax/annotation/concurrent/ –
El nombre del el bloqueo se puede escribir de forma más compacta de la siguiente manera: @GuardedBy ("readWriteLock") - la porción "value =" no se requiere explícitamente. –
Mi pregunta no es realmente acerca del uso básico. Estoy tratando de averiguar si un java.util.concurrent.locks.ReadWriteLock, que contiene tanto un bloqueo de lectura como un bloqueo de escritura, debe ser referido en una anotación @GuardedBy como el ReadWriteLock completo, o por la lectura y escritura individual cabellos. Y si algo de esto es efectivo. –
- 1. @GuardedBy, @ThreadSafe, @ NotThreadSafe
- 2. anotación ggplot2 con superíndices
- 3. uso de la anotación @xmlSchema con jaxb
- 4. anotación @EnableTransactionManagement con 2 gestores de transacciones
- 5. Administradores de transacciones múltiples con anotación @Transactional
- 6. Anotación de Django con filtro anidado
- 7. lote de primavera con la anotación
- 8. Spring: gestor de transacciones con anotación
- 9. Ejemplo de código con anotación en JavaDoc
- 10. Django queryset de actualización con la anotación
- 11. Extender entidades hibernadas con la anotación
- 12. Hibernate Jpa Anotación: Problema con Id Embedded
- 13. Restricción única con anotación de datos
- 14. anotación invisible?
- 15. anotación @ Override
- 16. @MustOverride anotación?
- 17. anotación & regex
- 18. anotación @Transactional
- 19. Java buscan un método con anotación específica y su elemento de anotación
- 20. Ignorar Hibernate @Where anotación
- 21. Django anotación estática
- 22. JAXB anotación Documentación
- 23. Cómo agregar una anotación a MKMapView utilizando una anotación MKPoint?
- 24. Anotación para deshabilitar JavaDocs
- 25. anotación en @EJB clientes
- 26. Java anotación tipografía dinámica
- 27. Java - JPA - @Version Anotación
- 28. @Model anotación y MVC
- 29. @UniqueConstraint anotación en Java
- 30. Anotación sobre barras:
Gracias! Solo una nota rápida, no sé el estado del arte FindBugs (¡por lo tanto, hice esta pregunta! :), pero el enlace que menciona que la anotación podría no implementarse parece tener cuatro años. –
Ese proyecto es muy activo, a juzgar por la actividad en el rastreador de errores vinculado. –
¿Te refieres al proyecto FindBugs? Oh seguro, está vivo y bien. Quise decir la declaración específica de hace cuatro años que la anotación GuardedBy podría no implementarse. Estoy diciendo que el código FindBugs más reciente podría implementarlo. Lo siento si malinterpreté o malentendí algo. –