Frage von tellme84, 37

java threads?

Ich schreibe ein übungsprgramm in dem 3 threads paralel laufen sollen... klapp auch, bis ich im dritten mit wait(1000) oder thread.sleep(1000) pausieren will, dan leuft der dritte nich mehr und nur die ersten beiden werden ausgeführt... woran kann das liegen?

Expertenantwort
von KnusperPudding, Community-Experte für Java, 19

 dan leuft der dritte nich mehr

Doch der läuft, aber aber bei jedem Schleifendurchlauf verzögert um eine Sekunde.

Kommentar von tellme84 ,

so sollte es sein, nur der text wirt nicht ausgegeben, wennn ich die sleep methode in einen andern thread schreibe, wir da die ausgabe nicht gemacht

habe auch versucht die ausgabe in den try bllock zu schreiben wird trotzdem nicht ausgegeben

Kommentar von KnusperPudding ,

nur der text wirt nicht ausgegeben

Doch, wird er. Schau dir deinen Output genau an.

Kommentar von tellme84 ,

ich kann im output nichts finden....

habe das programm noch mal geschrieben so das der thread mit einer sekunde pause als erster steht, jetzt geht das mir der pause aber die anderen werden nicht mehr ausgeführt, wenn ich dann den ersten auskommentiere dann gehen die ohne wieder

Kommentar von KnusperPudding ,

Dann poste dein vollständiges Programm. Inklusive des Teils, der deine Threads startet, denn am bereits geposteten Teil ist nichts auffälliges erkennbar.

Nutze als Codeupload sinnvollerweise. Pastebin, Hastebin oder Pastie.

Antwort
von Mikkey, 37

Natürlich läuft der Thread nicht weiter, wenn er schläft.

Kommentar von tellme84 ,

er schläft ja nur 1000 millisekunden , dann müsste er doch weiter laufen habe es ja schon mal genauso hin gekiegt das eine JList jede sekunde ein neues item krigt



package threads;

class ThreadKlasse1 extends Thread {

public void run(){
for(int i = 0;true;i++){
System.out.println("Thread 1: " + i++);
}
}

}
class ThreadKlasse2 extends Thread {
public void run(){
for(int i = 0;true;i++){
System.out.println("Thread 2: " + i++);
}
}

}

class ThreadKlasse3 extends Thread {
public void run(){
for(int i = 0;true;i++){
System.out.println("Thread 3: " + i++);
}
}

}


Kommentar von Mikkey ,

Code?

Kommentar von tellme84 ,

die letzte klasse noch mal mit der anweisung

 class ThreadKlasse3 extends Thread {
public void run(){
for(int i = 0;true;i++){
System.out.println("Thread 3: " + i++);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

}
Kommentar von Mikkey ,

Woran hast Du festgestellt, dass Thread3 nicht mehr läuft?

Es sollten einige Tausend Ausgaben aus thread1 und -2 kommen, zwischen denen sich jeweils eine Ausgabe von Thread3 verliert.

Baue halt Sleeps (unterschiedlich lange) in alle Threads ein, dann siehst Du auch alle drei laufen.

Übrigens solltest DU das "++" aus System.out.println("Thread 3: " + i++); entfernen, weil sonst 0/2/4/6 ausgegeben werden. Man ändert in for-Schleifen nicht die Schleifenvariable.

Kommentar von tellme84 ,

^^ das mit dem i++ var ein tippfehler

ich sehe das daran das bei der ausgabe die zahlen wechseln, und die 3 erscheint nich, wenn ich in den zweiten thread eine sleep funktion einbaue dan leuft der auch nicht mehr

Kommentar von Mikkey ,

Wie schon geschrieben wirst Du die "3" zwischen mehreren tausend Ausgaben auch nicht sehen.

Kommentar von tellme84 ,

ohne sleep sehe ich sie ja , und wenn ich das programm beende dann kann ich in der konsole hoch scrollen, und sehe die 1 und die 2 und ohne sleep sehe ich  auch die 3

Kommentar von Mikkey ,

Du willst es nicht verstehen?

Ändere die 1000 einfach mal auf 10, dann kommen häufigere 3-en und davon bleiben auch welche im Puffer der Konsole.

Keine passende Antwort gefunden?

Fragen Sie die Community