[Java 1.4.2] Threads und Rückgabe/Abrufbare-Werte?
- Emanuelle_1982
- Mitglied
- Beiträge: 535
- Registriert: 06.03.2006 18:37
- Wohnort: Nümbrecht & Siegen
- Kontaktdaten:
[Java 1.4.2] Threads und Rückgabe/Abrufbare-Werte?
Hallo,
ich muss für die Uni ein Programm schreiben, das 2 Threads startet und die dort ermittelten Werte zum Schluss addiert.
Mein Problem: da die Threads nach dem Durchlaufen scheinbar nicht mehr existieren funktionieren komme ich nicht mehr an die Werte ran.
Wie lässt sich das Problem lösen?
*keine Idee mehr hat, da Exceptions scheinbar auch nicht aufgefangen werden*
Danke schon mal
Emma
ich muss für die Uni ein Programm schreiben, das 2 Threads startet und die dort ermittelten Werte zum Schluss addiert.
Mein Problem: da die Threads nach dem Durchlaufen scheinbar nicht mehr existieren funktionieren komme ich nicht mehr an die Werte ran.
Wie lässt sich das Problem lösen?
*keine Idee mehr hat, da Exceptions scheinbar auch nicht aufgefangen werden*
Danke schon mal
Emma
- Emanuelle_1982
- Mitglied
- Beiträge: 535
- Registriert: 06.03.2006 18:37
- Wohnort: Nümbrecht & Siegen
- Kontaktdaten:
Da habe ich das Problem wohl nicht so gut formuliert...Pyramide hat geschrieben:Eine einfache Lösung wäre, wenn du am Ende der Berechnung im einen Thread per andererThread.join() auf den anderen wartest und dann mit beiden Ergebnissen weiterarbeitest.
ich komme nicht an die Ergebnisse..
ich habe es unter anderem mit einer public Variable und einer public Methode probiert..
wenn ich nun mit join darauf warte das der Thread fertig ist, dann funktionieren weder der Aufruf der Methode, noch die Variable selbst...
Wir haben leider auch nicht viel Material dazu... nur ein Beispiel wo der Thread ein System.out.print() aufruft und so das Ergebnis ausspuckt...
Trotzdem schonmal Danke...
- Emanuelle_1982
- Mitglied
- Beiträge: 535
- Registriert: 06.03.2006 18:37
- Wohnort: Nümbrecht & Siegen
- Kontaktdaten:
leider hat das von Pyramide kein bisschen geholfen, das join hatte ich vorher drin ( 'nach dem Durchlaufen' )...
Ich will nur eine Möglichkeit um an dort errechnete Werte zu kommen
ich habe probiert eine Klasse zu übergeben, ich habe probiert mithilfe einer Variable oder Methode nach dem join den Wert zu bekommen und ich habe versucht eine Exception zu werfen...
diese Wege waren falsch oder ich hatte einen Denkfehler drin ...
Würde ich jetzt sagen: Ich soll eine Java Anwendung schreiben die auf HTML Basis funktioniert, dabei Eingaben überprüfen soll und diese in Threads verarbeiten - DANN wäre Kritik angebracht...
aber das einzige woran ich scheitere ist dsa Ergebnis aus den Threads zu bekommen... ohne die Threads klappt alles wunderbar, mit Threads kommen richtige Teilergebnisse raus - aber leider sehe ich sie nur bei System.out. --- und damit kann ich ja im Nachhinenein nicht viel anfangen
Also falls du mir vielleicht gleich ein wenig freundlicher gesonnen bist?
PS: das Semester ist fast zu Ende - und das die erste Frage zu Java von mir, oder?
Und ja, in der Klausur habe ich kein Internet ...
ABER:
dies ist der erste Aufgabenteil (und das in 9 komplett gelösten und dieser bis auf den Teilbereich gelösten Aufgabe) das einzige wo es hapert...
Vielleicht reicht es ja für die Klausur?
Und den imperativen C sowie den Prolog Teil habe ich mit 1,6 bestanden
*anmerk*
*deine Antwort sehr negativ aufgenommen hat*
Emma
Ich will nur eine Möglichkeit um an dort errechnete Werte zu kommen
ich habe probiert eine Klasse zu übergeben, ich habe probiert mithilfe einer Variable oder Methode nach dem join den Wert zu bekommen und ich habe versucht eine Exception zu werfen...
diese Wege waren falsch oder ich hatte einen Denkfehler drin ...
Würde ich jetzt sagen: Ich soll eine Java Anwendung schreiben die auf HTML Basis funktioniert, dabei Eingaben überprüfen soll und diese in Threads verarbeiten - DANN wäre Kritik angebracht...
aber das einzige woran ich scheitere ist dsa Ergebnis aus den Threads zu bekommen... ohne die Threads klappt alles wunderbar, mit Threads kommen richtige Teilergebnisse raus - aber leider sehe ich sie nur bei System.out. --- und damit kann ich ja im Nachhinenein nicht viel anfangen
Also falls du mir vielleicht gleich ein wenig freundlicher gesonnen bist?
PS: das Semester ist fast zu Ende - und das die erste Frage zu Java von mir, oder?
Und ja, in der Klausur habe ich kein Internet ...
ABER:
dies ist der erste Aufgabenteil (und das in 9 komplett gelösten und dieser bis auf den Teilbereich gelösten Aufgabe) das einzige wo es hapert...
Vielleicht reicht es ja für die Klausur?
Und den imperativen C sowie den Prolog Teil habe ich mit 1,6 bestanden
*anmerk*
*deine Antwort sehr negativ aufgenommen hat*
Emma
- Emanuelle_1982
- Mitglied
- Beiträge: 535
- Registriert: 06.03.2006 18:37
- Wohnort: Nümbrecht & Siegen
- Kontaktdaten:
ich kürze das ganze ein wenig ab. Kurz zur Erläuterung: Ein int Array (positive Zahlen) wird eingelesen, in 2 etwa gleich große Teile zerlegt und jede Hälfte an einen Thread gegeben...
und schonmal danke...
manchmal bin ich einfach nur doof
Code: Alles auswählen
class quersumme extends Thread {
private int[] array;
public int ergebnis;
public quersumme(int[] array) {
this.array = array;
this.ergebnis = 0;
}
public void run() {
try {
for ( int i = 0; i < this.array.length; i++ ) {
this.ergebnis += this.array[i];
if ( this.ergebnis < 0 ) // passiert bei Überlauf !!
throw new IllegalArgumentException();
}
}
catch ( IllegalArgumentException e ) {
this.ergebnis = -1;
}
// hier habe ich versucht eine Exception zu werfen, kommt aber in main nicht an
}
public int getErgebnis() {
return this.ergebnis;
}
}
public class Aufgabe1b {
public static void main(String[] args) {
/* Array bekommen, in Teilarray tmpArray1/2 zerlegen*/
// ich habe auch versucht ein Wrapper zu übergeben, aber der wird halt kopiert, nicht übergeben...
Thread quersumme1 = new quersumme(tmpArray1);
Thread quersumme2 = new quersumme(tmpArray1);
quersumme1.run();
quersumme2.run();
try {
quersumme1.join();
quersumme2.join();
} catch (InterruptedException e) {
System.out.println("DAS sollte jetzt eigentlich nicht passieren...");
}
// hier war der Versuch auf ergebnis in der Klasse zuzugreifen mithilfe der Metode getErgebnis bzw dem direkten Variablen aufruf
}
}
manchmal bin ich einfach nur doof

- Emanuelle_1982
- Mitglied
- Beiträge: 535
- Registriert: 06.03.2006 18:37
- Wohnort: Nümbrecht & Siegen
- Kontaktdaten:
- Emanuelle_1982
- Mitglied
- Beiträge: 535
- Registriert: 06.03.2006 18:37
- Wohnort: Nümbrecht & Siegen
- Kontaktdaten:
lange hat es gedauert...
naja... also ob start oder run - in beiden Fällen war der Thread weg...
Lösung: statt von der Main-Methode nach dem join die Threads abzufragen kann man auch im Thread am Ende eine Methode der Hauptklasse aufrufen, wo das Ergebnis einfach geaddet wird...
*blockiert war*
Trotzdem danke - damit sind die Hausaufgaben fertig *gg*
also nochmal Danke
Emma
naja... also ob start oder run - in beiden Fällen war der Thread weg...
Lösung: statt von der Main-Methode nach dem join die Threads abzufragen kann man auch im Thread am Ende eine Methode der Hauptklasse aufrufen, wo das Ergebnis einfach geaddet wird...
*blockiert war*
Trotzdem danke - damit sind die Hausaufgaben fertig *gg*
also nochmal Danke
Emma