# Rückgabewert von threads?



## Solna (25. Sep 2008)

Hallo alle zusammen,

Ich habe folgendes problem, bitte, helft mir:

Ich habe mein Programm auf 4 threads geteilt, damit es schneller läuft.
Aber am ende muss ich die Ergebnisse von jedem Threads zusammenzählen.

Die Frage ist: wie kann kriege ich aus Thread ein Wert zurück.

Hier ist mein Code

```
public class Berechnung1 extends Thread{  
public void run() {.......

Main:
Berechnung1 work1 = new Berechnung1();
        Berechnung2 work2 = new Berechnung2();
        Berechnung3 work3 = new Berechnung3();
        Berechnung4 work4 = new Berechnung4();
        
        work1.start();
        work2.start();
        work3.start();
        work4.start();
```


----------



## SlaterB (25. Sep 2008)

work1.getYourResult();

mit 
work1.join();
kannst du in main auf das Ende des Threads warten,
ansonsten tuts auch sonstige Synchronisierung/ Warteschleife mit Status-Abfrage usw


----------



## Solna (25. Sep 2008)

Danke, das sieht schon gut aus...
aber verstehe ich trotzdem nicht, was ich dann in class Berechnung1 schreiben soll.

Ein return geht mit run() nicht.
Und ich vermute, dass ohne run() kann ich dann kein start() in main ausführen.

Bitte, noch einwenig code. (Ich möchte eine ArrayListe zurückgeben).


----------



## SlaterB (25. Sep 2008)

am Ende von run speicherst du die ArrayListe in einem Klassenattribut,
welches dann von außen mit getX(); abgefragt werden kann

run() und start() haben zurecht keinen Rückgabewert, richtig


----------



## Niki (25. Sep 2008)

```
Berechnung1 work1 = new Berechnung1();
        Berechnung2 work2 = new Berechnung2();
        Berechnung3 work3 = new Berechnung3();
        Berechnung4 work4 = new Berechnung4();
       
        work1.start();
        work2.start();
        work3.start();
        work4.start(); 

        work1.join();
        work2.join();
        work3.join();
        work4.join();

        Object res1 = work1.getResult();
        Object res2 = work2.getResult();
        //und so weiter
```

In Berechnung1 brauchst du dann eine Methode getResult, diese liefert dir dann das Ergebnis.
z.B.


```
public class Berechnung1 extends Thread{

  private Object result = null;

  public void run(){
    //mach was, dann schreib das Ergebnis in result:
    result = "Berechnung1 ist fertig";
  }

  public Object getResult(){
    return result;
  }
}
```


----------



## Leroy42 (25. Sep 2008)

Solna hat gesagt.:
			
		

> Danke, das sieht schon gut aus...
> aber verstehe ich trotzdem nicht, was ich dann in class Berechnung1 schreiben soll.




```
work1.start();
work1.join();
sum += work1.getYourResult();
```

Aber so macht die Auslagerung in eigene Threads irgendwie wenig Sinn.


----------



## Solna (25. Sep 2008)

Super! Danke!
Jetzt ist alles klar!
Probiere ich aus.


----------



## Landei (25. Sep 2008)

Wenn du einen "Thread mit Rückgabewert" haben willst, schau dir doch mal Future und ExecutorService an.


----------

