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

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Benutzeravatar
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?

Beitrag 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
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag 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.
KB:knigge
Benutzeravatar
Emanuelle_1982
Mitglied
Beiträge: 535
Registriert: 06.03.2006 18:37
Wohnort: Nümbrecht & Siegen
Kontaktdaten:

Beitrag 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...
Benutzeravatar
kellanved
Mitglied
Beiträge: 570
Registriert: 05.02.2005 15:15
Wohnort: Berlin

Beitrag 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.
Bitte keine Supportanfragen via PM
Benutzeravatar
Emanuelle_1982
Mitglied
Beiträge: 535
Registriert: 06.03.2006 18:37
Wohnort: Nümbrecht & Siegen
Kontaktdaten:

Beitrag 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
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag von Pyramide »

Wie sieht denn der Code aus, der nicht funktioniert?
KB:knigge
Benutzeravatar
Emanuelle_1982
Mitglied
Beiträge: 535
Registriert: 06.03.2006 18:37
Wohnort: Nümbrecht & Siegen
Kontaktdaten:

Beitrag 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:
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag von Pyramide »

Lies dir mal die Dokumentation zu Thread.run() und Thread.start() durch.
KB:knigge
Benutzeravatar
Emanuelle_1982
Mitglied
Beiträge: 535
Registriert: 06.03.2006 18:37
Wohnort: Nümbrecht & Siegen
Kontaktdaten:

Beitrag von Emanuelle_1982 »

OK, danke
das werde ich mir nochmal genauer anschauen

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

Emma
Benutzeravatar
Emanuelle_1982
Mitglied
Beiträge: 535
Registriert: 06.03.2006 18:37
Wohnort: Nümbrecht & Siegen
Kontaktdaten:

Beitrag 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
Antworten

Zurück zu „Coding & Technik“