Ich habe eine Methode geschrieben, die nur für einen bestimmten Thread aufgerufen werden sollte. Gibt es eine Standard-Anmerkung oder Notiz, die dem Javadoc der Methode hinzugefügt werden sollte, um dies zu bezeichnen?Java threading JavaDoc
Antwort
Ich kenne keine solchen Standard-Annotationen. Java Concurrency in Practice befasst sich mit der Frage in Abschnitt 4.5: Dokumentieren von Synchronisierungsrichtlinien. Ein paar Tipps, die Ihnen hoffentlich helfen, Ihre Dokumentation klar und nützlich zu machen:
Dokumentieren Sie zumindest die Thread-Sicherheitsgarantien einer Klasse. Ist es threadsicher? Werden Callbacks mit einer Sperre durchgeführt? Gibt es bestimmte Sperren, die das Verhalten beeinflussen? Zwingen Sie die Kunden nicht zu riskanten Vermutungen. Wenn Sie sich nicht zur Unterstützung der clientseitigen Sperrung verpflichten möchten, ist das in Ordnung, aber sagen Sie es. Wenn Sie möchten, dass Clients in der Lage sind, neue atomare Operationen in Ihrer Klasse zu erstellen, wie in Abschnitt 4.4, müssen Sie dokumentieren, welche Sperren sie benötigen, um dies sicher zu tun. Wenn Sie Sperren verwenden, um den Status zu schützen, dokumentieren Sie dies für zukünftige Administratoren, da dies so einfach ist - die
@GuardedBy
Annotation wird den Trick machen. Wenn Sie subtilere Mittel zur Aufrechterhaltung der Thread-Sicherheit verwenden, dokumentieren Sie sie, da sie für die Betreuer möglicherweise nicht offensichtlich sind.
Sie verwenden auch einige Anmerkungen, die nicht Standard sind, aber von ihnen empfohlen werden (siehe Anhang A). Für Methoden bieten sie jedoch nur Variationen von @GuardedBy
, die für Ihren Fall nicht anwendbar ist.
Ich empfehle nur klar die Anforderung in einfachen Javadoc zu dokumentieren.
Meiner Meinung nach ist der beste Weg, damit umzugehen, die Anforderung zu entfernen. Ändern Sie die Methode in private und benennen Sie sie leicht um, indem Sie das Wort Workload
oder Internal
oder etwas hinzufügen. Erstellen Sie dann eine neue öffentliche Methode mit derselben Signatur. Lassen Sie diese Methode überprüfen, um zu sehen, ob Sie im richtigen Thread sind. Wenn dies der Fall ist, können Sie einfach die private Methode ausführen. Wenn nicht, dann planen Sie die private Methode, die im richtigen Thread ausgeführt werden soll. Auf diese Weise muss sich der Benutzer der API nicht um das Threading kümmern und kann die Methode nur aufrufen.
Dann gibt es nichts im Javadoc zu spezifizieren, obwohl es immer noch nützlich ist, diese Informationen in die Beschreibung der öffentlichen und privaten Methoden aufzunehmen.
Dies ist das Muster, das ich benutze, wenn ich etwas auf dem EDT ausgeführt müssen:
/** * 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 gehören Privat
- 2. Java Swing Threading
- 3. Paralleles Threading in Java
- 4. Java-Multi Threading-Semaphor
- 5. Java Threading Problem?
- 6. Entwurfsmuster für Java-Threading
- 7. Multi Threading in Java
- 8. Java Threading Speicherverwaltung Probleme
- 9. Multi Threading Java
- 10. Threading in Java
- 11. Java Servlets Threading-Modell
- 12. Java parallele Berechnung/threading
- 13. Unvollständiges Javadoc in Java 8?
- 14. Threading in Java EE Webapps
- 15. Java Threading Tutorial Typ Frage
- 16. Die effizienteste Java-Threading-Technik?
- 17. Basic Java-Threading (4 Threads) langsamer als Non-Threading
- 18. Javadoc für javadoc com.install4j.runtime.beans.formcomponents.DirectoryChooserComponent
- 19. Javadoc Versionierung
- 20. JAVA Multi-Threading, Speicherleck, Garbage Collector
- 21. Java Threading und das JTabbedPane Dilemma
- 22. Java EE Spezifikation und Multi Threading
- 23. Java Simple und Single Threading IllegalMonitorStateException
- 24. Ausnahme beim Abrufen des Javadoc: Unbekanntes Javadoc-Format
- 25. Doxygen vs Javadoc
- 26. Javadoc mehr Pakete
- 27. JavaDoc mit Python extrahieren
- 28. Netbeans und Javadoc
- 29. Javadoc auf Android (Eclipse)
- 30. JavaFX 2.2 javadoc?
, um wirklich den Punkt nach Hause fahren möchten Sie vielleicht eine Behauptung in der 'executeSomethingInternal' Methode verwenden, auch, wie' assert SwingUtilities.isEventDispatchThread() ' – gustafc
Als private Methode kann' executeSomethingInternal' nur innerhalb derselben Klasse aufgerufen werden. Wenn alle Aufrufe in "executeSomething" sind, gibt es keine Möglichkeit, dass "executeSomethingInternal" jemals außerhalb des EDT aufgerufen werden kann. Die Behauptung würde sicherstellen, dass zukünftige Programmierer dies weder vorsätzlich noch ohne Rücksicht auf das Design verletzen. –
Auch private Methoden benötigen leider Dokumentation. – Armand