Qual è un modo corretto/preferito per annotare campi protetti con uno ReadWriteLock
in modo che strumenti come FindBug possano sfruttare l'annotazione? Il nome dello ReadWriteLock
deve essere semplicemente scritto nell'annotazione @GuardedBy
. C'è mai un motivo per scrivere il nome di solo il blocco di lettura, o solo il blocco di scrittura, nell'annotazione @GuardedBy
? FindBugs o altri strumenti supportano anche ReadWriteLock
in @GuardedBy
?@GuardedBy annotazione con java.util.concurrent.locks.ReadWriteLock
risposta
Al momento in cui scriviamo, @GuardedBy
isn't fully implemented by Findbugs, ed è per lo più solo per documentazione. (È parzialmente implementato.)
Io uso sempre @GuardedBy("readwritelock")
o l'oggetto che uso per synchronize
.
Ad esempio di quest'ultimo:
class Example {
private Object lock = new Object();
@GuardedBy("lock")
private Stuff innards = ...;
public void work() {
synchronized(lock) {
workWith(innards.goop());
}
}
}
trovare bug supporta le seguenti annotazioni:
net.jcip.annotations.GuardedBy
net.jcip.annotations.Immutable
net.jcip.annotations.NotThreadSafe
net.jcip.annotations.ThreadSafe
utilizzo di questi GuardedBy annotazioni dovrebbe essere la seguente:
@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);
}
}
Queste annotazioni sono anche catturato in JSR305. Possono essere visti in questa implementazione di riferimento: http://code.google.com/p/jsr-305/source/browse/trunk/ri/src/main/java/javax/annotation/concurrent/ –
Il nome del il blocco può essere scritto in modo più compatto come questo: @GuardedBy ("readWriteLock") - la porzione "value =" non è esplicitamente richiesta. –
La mia domanda non riguarda l'utilizzo di base. Sto cercando di capire se un java.util.concurrent.locks.ReadWriteLock, che contiene sia un blocco di lettura che un blocco di scrittura, deve essere indicato in un'annotazione @GuardedBy come l'intero ReadWriteLock o dall'individuo in lettura e scrittura serrature. E se tutto ciò è efficace. –
- 1. @GuardedBy, @ThreadSafe, @ NotThreadSafe
- 2. annotazione ggplot2 con apici
- 3. annotazione codice Gen con JavaPoet
- 4. lotto di primavera con annotazione
- 5. annotazione Django con filtro annidato
- 6. @xmlSchema annotazione utilizzata con jaxb
- 7. Vincolo univoco con annotazione dati
- 8. Spring 3 @Annotazione Problemi di annotazione
- 9. Estensione di entità di sospensione con annotazione
- 10. Annotazione non trovata sull'oggetto con Ritenzione runtime
- 11. Sostituzione codice con un processore di annotazione
- 12. Guice dynamic injection con annotazione personalizzata
- 13. Formattazione serializzazione controllo GSON con annotazione
- 14. Integrazione di processori di annotazione con Gradle
- 15. Annotazione query JPQL con limite e offset
- 16. Eliminazione dalla tabella con annotazione @OneToOne
- 17. metodi sicuri MVC controller con @Secured annotazione
- 18. annotazione @Transactional
- 19. annotazione @Override
- 20. @AspectJ Avviso annotazione a livello di classe con annotazione come argomento metodo
- 21. Configurazione tramite annotazione @SpringBootApplication
- 22. django annotazione statica
- 23. Annotazione valore "null" predefinito
- 24. @ManyToAny annotazione in sospensione
- 25. Scala annotazione Ereditarietà
- 26. Ereditarietà primavera - Annotazione
- 27. Utilizzando annotazione @Value
- 28. politica annotazione SOURCE Retention
- 29. Annotazione transazionale a molla
- 30. Annotazione sopra le barre:
Grazie! Solo una breve nota, non conosco lo stato dell'arte di FindBugs (quindi ho posto questa domanda! :), ma il link che indica che l'annotazione potrebbe non essere implementata sembra avere quattro anni. –
Questo progetto è molto attivo, a giudicare dall'attività sul bug-tracker collegato. –
Intendi il progetto FindBugs? Oh certo, è vivo e vegeto. Intendevo la dichiarazione specifica di quattro anni fa che l'annotazione di GuardedBy potrebbe non essere implementata. Sto dicendo che il codice più recente di FindBugs potrebbe averlo implementato. Scusa se ho letto male/frainteso qualcosa. –