Seite 1 von 2

[Java 1.4.2] Threads und Rückgabe/Abrufbare-Werte?

Verfasst: 24.06.2006 23:04
von Emanuelle_1982
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

Verfasst: 25.06.2006 01:43
von Pyramide
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.

Verfasst: 25.06.2006 09:45
von Emanuelle_1982
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.
Da habe ich das Problem wohl nicht so gut formuliert...
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...

Verfasst: 25.06.2006 14:41
von kellanved
Tschuldige, aber Deine Hausaufgaben musst Du schon selbst machen. Spätestens in der Klausur gibt es kein Internet/Forum, um Dir zu helfen.

Das geschilderte Problem ist wirklich recht leicht und Pyramide hat Dir bereits einen wertvollen Ratschlag gegeben.

Verfasst: 25.06.2006 15:38
von Emanuelle_1982
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

Verfasst: 25.06.2006 20:02
von Pyramide
Wie sieht denn der Code aus, der nicht funktioniert?

Verfasst: 25.06.2006 20:45
von Emanuelle_1982
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...

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
	}
}
und schonmal danke...

manchmal bin ich einfach nur doof :oops:

Verfasst: 25.06.2006 22:32
von Pyramide
Lies dir mal die Dokumentation zu Thread.run() und Thread.start() durch.

Verfasst: 25.06.2006 22:43
von Emanuelle_1982
OK, danke
das werde ich mir nochmal genauer anschauen

*sich dann nochmal melden wird - vermtl. mo-mittag*

Emma

Verfasst: 28.06.2006 18:44
von Emanuelle_1982
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