Ich habe eine Java-Klasse, die Thread
erweitert, im Prinzip sieht das so aus:
Ich brauche die Methode run()
, um eine ByteArrayOutputStream
oder eine String
zurückzugeben. Da es jedoch in der Methode run()
von Thread
ist, kann ich den Rückgabetyp der Methode nicht auf ByteArrayOutputStream
oder String
setzen.
Die Klasse HttpRequestDispatcher
wird innerhalb einer Klasse namens OAuth.java aufgerufen.
Wie kann ich diese Situation umgehen?
Es gibt mehrere Lösungen für dieses Problem:
Verwenden Sie eine Datenstruktur außerhalb des Threads. Übergeben Sie das Objekt in Ihrem Konstruktor und aktualisieren Sie es, wenn der Thread kurz vor dem Abschluss steht.
Verwenden Sie eine Rückrufmethode. Wenn Ihr Thread fertig ist, rufen Sie den Rückruf an.
Nutzen Sie java.util.concurrent.Future
(Java & gt; = 1,5):
Ein Future repräsentiert das Ergebnis einer asynchronen Berechnung. Es werden Methoden bereitgestellt, um zu überprüfen, ob die Berechnung abgeschlossen ist, auf ihre Beendigung zu warten und das Ergebnis der Berechnung abzurufen.
Lassen Sie Callable<T>
anstelle von% implementieren. co_de% oder Thread
. Hier muss Runnable
den Typ des Ergebnisses darstellen. Verwenden Sie T
, um es auszuführen. Es wird das Ergebnis im Geschmack eines ExecutorService
zurückgegeben .
Hier ist ein SSCCE mit Future<V>
als String
, nur copy'n'paste'n'run.
Tags und Links java multithreading methods return