Ho scritto un metodo che dovrebbe essere chiamato solo su un thread particolare. C'è un'annotazione o una nota standard che dovrebbe essere aggiunta al metodo javadoc per denotare questo?Java threading JavaDoc
risposta
Non so di tali annotazioni standard. Java Concurrency in Practice tratta la domanda nella sua sezione 4.5: Documentazione dei criteri di sincronizzazione. Alcuni suggerimenti che ti aiuteranno a rendere la tua documentazione chiara e utile:
Per lo meno, documenta le garanzie di sicurezza del filo fatte da una classe. È thread-safe? Rende i callback con un blocco trattenuto? Ci sono dei blocchi specifici che influenzano il suo comportamento? Non forzare i clienti a fare ipotesi azzardate. Se non vuoi impegnarti a supportare il blocco sul lato client, va bene, ma dillo. Se vuoi che i client siano in grado di creare nuove operazioni atomiche sulla tua classe, come abbiamo fatto nella Sezione 4.4, devi documentare quali lock dovrebbero acquisire per farlo in modo sicuro. Se si utilizzano i blocchi sullo stato di protezione, documentarlo per i futuri manutentori, perché è così semplice: l'annotazione
@GuardedBy
farà il trucco. Se si utilizzano metodi più sottili per mantenere la sicurezza dei thread, documentarli perché potrebbero non essere ovvi per i manutentori.
Si utilizzano anche alcune annotazioni, che non sono standard, ma raccomandate da loro (vedere Appendice A). Tuttavia, per i metodi offrono solo variazioni di @GuardedBy
, che non è applicabile al tuo caso.
Si consiglia di documentare chiaramente il requisito in plain Javadoc.
A mio parere, il modo migliore per gestirlo è rimuovere il requisito. Cambia il metodo in privato e rinominalo leggermente aggiungendo la parola Workload
o Internal
o qualcosa del genere. Quindi creare un nuovo metodo pubblico con la stessa firma. Verifica questo metodo per vedere se sei nella discussione corretta. Se lo sei, puoi semplicemente eseguire il metodo privato. In caso contrario, pianificare il metodo privato da eseguire sul thread corretto. In questo modo, l'utente dell'API non deve preoccuparsi del threading e può semplicemente chiamare il metodo.
Quindi, non c'è nulla da specificare in javadoc, sebbene sia ancora utile includere queste informazioni nella descrizione dei metodi pubblici e privati.
Questo è il modello che uso quando ho bisogno di qualcosa eseguito sul EDT:
/** * Executes something on the EDT with the crazy argument specified. If this is * called outside of the EDT, it will schedule the work to be done on the EDT * as soon as possible. The actual work of this method is found in * {@link #executeSomethingInternal(int)}. * * @argument crazyArgument some crazy argument */ public void executeSomething(int crazyArgument) { if (SwingUtilities.isEventDispatchThread()) { this.executeSomethingInternal(crazyArgument); } else { Runnable r = new Runnable() { private int crazyArgument; public Runnable setCrazyArgument(int crazyArgument) { this.crazyArgument = crazyArgument; return this; } @Override public void run() { this.OuterClass.executeSomethingInternal(this.crazyArgument); } }.setCrazyArgument(crazyArgument); SwingUtilities.invokeLater(r); } } /** * This method actually does the work. It is guaranteed by this class to * always get called on the EDT. Users of this API should call * {@link #executeSomething(int)}. */ private void executeSomethingInternal(int crazyArgument) { // do work here }
- 1. Java Javadoc include Private
- 2. Modello di threading Java Servlet
- 3. Specifica Java EE e multi-threading
- 4. Far funzionare un programma java senza threading
- 5. Parser JavaDoc per javadoc comuni?
- 6. javadoc @link
- 7. Threading Java di base (4 thread) più lento rispetto a non threading
- 8. Eclipse Genera Javadoc Wizard: cos'è "Javadoc Command"?
- 9. Javadoc su Android (Eclipse)
- 10. JavaFX 2.2 javadoc?
- 11. Pagina index.html javadoc personalizzata?
- 12. GoogleAnalyticsTracker javadoc
- 13. Threading: C# ha un equivalente dell'interfaccia Runnable Java?
- 14. Java Multi Threading - casi d'uso del mondo reale
- 15. Integrazione di Javadoc per Java EE 6 API in Eclipse
- 16. Threading in un server applicazioni
- 17. Come rimuovere R.java da JavaDoc
- 18. Come creare tag javadoc personalizzati?
- 19. Maven javadoc: javadoc funziona ma javadoc: aggregato genera errori che sembrano errori del compilatore
- 20. Disabilita tutto JavaDoc in Gradle
- 21. Generazione jar sorgente e Javadoc
- 22. API threading portatili
- 23. Threading heap and stack
- 24. 'sys.excepthook' e threading
- 25. C threading in linux?
- 26. PerformSelector Monotouch Threading
- 27. C# Threading & Blocking
- 28. threading e prestazioni Python?
- 29. Threading C++ 0x
- 30. Threading, Copiato, Errore, SetTextCallback
Per guidare davvero il punto a casa, si potrebbe desiderare di utilizzare un'affermazione nel metodo 'executeSomethingInternal', anche, come' asserire SwingUtilities.isEventDispatchThread() ' – gustafc
Essendo un metodo privato,' executeSomethingInternal' può essere chiamato solo all'interno della stessa classe. Se tutte le chiamate sono in "executeSomething", allora non è possibile che executeSomethingInternal venga chiamato all'esterno di EDT. L'affermazione garantirebbe che i futuri programmatori non violino questo intenzionalmente o senza riguardo per il design. –
Anche i metodi privati richiedono la documentazione, sfortunatamente. – Armand