Brauchen Sie Hilfe beim Zurückgeben von Objekt in Thread-Methode ausführen

8

Ich habe eine Java-Klasse, die Thread erweitert, im Prinzip sieht das so aus:

%Vor%

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?

    
littleK 19.02.2010, 23:57
quelle

2 Antworten

8

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.

miku 20.02.2010, 00:05
quelle
7

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.

%Vor%     
BalusC 20.02.2010 00:16
quelle