Objekt verstehen

julia123

Erfahrenes Mitglied
Hab es mal kurz erweitert:
Code:
@Override
	public void run() {

		for (char c = 'a'; c <= 'z'; c++) {

			System.out.println(c);

		}
		for (char b = 'A'; b <= 'Z'; b++) {

			System.out.println(b);

		}

	}

Problem: Ich weiss nicht wirklich was ich mit join() anfangen kann.
Waits for this thread to die. // Auf den Thread warten bis dieser beendent ist
An invocation of this method behaves in exactly the same way as the invocation//Der Aufruf einer Methode verhält sich in gleicher Weise wie der Aufruf?
 

sheel

I love Asm
join: Ruf es einfach auf, fertig :rolleyes:

Großbuchstaben: Du hast deine eigene Angabe nicht gelesen.
Auch von der join-Beschreibung hast du einen Teil vergessen.
Mit dem würde es mehr Sinn machen.
 

ComFreek

Mod | @comfreek
Moderator
Du hast den Satz unvollständig gelesen. 'join(0)' eine Zeile darunter gehört dazu:
An invocation of this method behaves in exactly the same way as the invocation
join(0)

Und nun schaust du nach was join(Integer/Long) macht.
 

julia123

Erfahrenes Mitglied
Also join(0) heißt für immer warten. und long ist milliseconds und int nanoseconds.Ich wiess nicht ich hab dieses join immer noch nicht verstanden was das macht. Es aufrufen? Was auf rufen und was hat das für ein Sinn? Mit Start wird doch meine Methode aufgerufen.

Code:
public static void main(String[] args) throws InterruptedException {
		Thread klein = new ABCThread();
		
		klein.join(0);
		klein.start();
		
	}
 

ComFreek

Mod | @comfreek
Moderator
Würdest du mal die Java-Dokumentation, die ich verlinkt habe, lesen?

join() wartet überhaupt nicht für immer. Lies bitte die Doku, dann weißt du auch, dass man join() nach start() aufrufen sollte.
 

julia123

Erfahrenes Mitglied
Waits at most millis milliseconds for this thread to die. A timeout of 0 means to wait forever. //

Wartet höchstens millis Millisekunden für diesen Thread, um zu sterben. Ein Timeout von 0 bedeutet, ewig warten.

This implementation uses a loop of this.wait calls conditioned on this.isAlive. As a thread terminates the this.notifyAll method is invoked. It is recommended that applications not use wait, notify, or notifyAll on Thread instances.//

Diese Implementierung verwendet eine Schleife this.wait fordert this.isAlive konditioniert. Wie ein Thread beendet die this.notifyAll Methode aufgerufen wird. Es wird empfohlen, dass Anwendungen nicht warten, melden, oder auf notifyAll Thema Instanzen.



googleÜbersetzer

Mein Englisch ist echt schwach aber ich versuch es zuverstehen. Und ich weiss nicht wo ich sonst noch mehr Informationen her bekommen. Das sind immer nur so 2 Sätze die mir echt nicht weiter bringen.


Ich vermute das ich jetzt ein Konstruktor baue. Wo ich mit this.wait arbeite... Und so irrgendwie groß und klein Buchstaben zu unterscheide.
 
Zuletzt bearbeitet:

ComFreek

Mod | @comfreek
Moderator
Google Übersetzer hat ein ganz passables Resultat für den ersten Absatz ausgegeben, jedoch beim zweiten nur Schwachsinn. Nutze keinen Computer-Übersetzer, die funktionieren erst recht nicht für solche fachspezifischen Texte!

Aber du brauchst gar nicht den zweiten Absatz zu verstehen, der ist in diesem Fall völlig irrelevant.

Wieso willst du im Konstruktor wait() benutzen? Es ist doch ganz einfach: du baust einen Konstruktur, der je nach übergebenem Argument*, entweder später intern in run() Großbuchstaben oder Kleinbuchstaben verwenden wird.

*) Eine Bool-Variable wäre für dich die einfachste Möglichkeit. (Viel besser wären allerdings Enums wg. aussagekräftigere Namenswahl; aber das nur am Rande erwähnt, falls du es irgendwann mal hörst.)
 

julia123

Erfahrenes Mitglied
Code:
public class ABCThread extends Thread {

	private boolean gOk;

	public ABCThread(String klgr) {

		if (klgr == "klein") {
			this.gOk = true;
		} else {
			this.gOk = false;
		}

	}

	@Override
	public void run() {

		if (gOk == true) {
			for (char c = 'a'; c <= 'z'; c++) {

				System.out.println(c);

			}
		} else {
			for (char b = 'A'; b <= 'Z'; b++) {

				System.out.println(b);

			}
		}
	}

}



public static void main(String[] args) throws InterruptedException {
		Thread klein = new ABCThread("klein");
		Thread groß = new ABCThread("groß");

		klein.start();
		groß.start();
	
		
	}
Wenn ich die jetzt einzeln starte geht alles, klein und groß. Aber wenn ich sie so wie oben starte also 2 Threads dann startet klein und mittendrin groß.
 

julia123

Erfahrenes Mitglied
Cool ich hab es verstanden******
Das join...
Code:
public static void main(String[] args) throws InterruptedException {
        Thread klein = new ABCThread("klein");
        Thread groß = new ABCThread("groß");
 
        klein.start();
        klein.join(0):
        groß.start();
    
        
    }
 

ComFreek

Mod | @comfreek
Moderator
Korrekterweise müsstest du noch ein join() hinzufügen, damit du das Problem umgehst, dass das Programm aus der main()-Methode "springt", bevor der Thread fertig ist:

Java:
klein.start();
// Brauchst eigtl. keine 0, denn .join() ist das Gleiche wie .join(0) laut Dokumentation
klein.join(0);

groß.start();
groß.join(0);