mccae
Senfdazugeber
Huhu,
Ich hab da ein merkwürdiges Problem,...
Wenn ich System.in.read() benutze, blockt dies ALLE Threads....
Hier mal ein Beispiel:
Hier wird der gleich folgende Thread gestartet, und nach System.in.read zum stoppen aufgefordert,...
Das ganze arbeitet nicht wie erwartet,....
Meiner Meinung nach sollte der Ouput so aussehen:
Er sieht aber so aus:
Es wird verhindert, dass der Thread in die run methode einsteigt.
Sobald ich irgendwas in die konsole tippe, und System.in.read returnt, beendet sich der Thread sofort (logisch).
Irgendwie machts nicht klick,....
Warum blockt nur diese Methode meinen anderen Thread?
Liebe Grüße,
Ich hab da ein merkwürdiges Problem,...
Wenn ich System.in.read() benutze, blockt dies ALLE Threads....
Hier mal ein Beispiel:
Java:
package ****.javamysterien.M122;
import java.io.IOException;
/**
* Java Mysterium, Katalognummer 122<p>
*
* Diese Javamysterium gehört in die Kategorie Threading<p>
*
* Es simuliert die seltsamen Eigenschaften von System.in.read<p>
*
* <i>Status: Ungeloest</i>
*
* @author mccae
*/
public class Mysterium122
{
public static void main (String [] args){
//Debug.OutUmleiten(Debug.MYSQLO,122,new MYSQLManager("localhost","root",""));
//Debug.ErrUmleiten(Debug.MYSQLE,122,new MYSQLManager("localhost","root",""));
//#122 %)
System.out.print("Filips Java-mysterium #122");
//Erstelle Runnable und Thread objekt
Mysterium122Runnable run = new Mysterium122Runnable();
Thread t = new Thread(run);
//Starte thread
t.start();
//System.in und warten
try {
System.in.read();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//Thread freundlich bitten zu sterben
run.quit = true;
//Auf den Kollegen warten
while(!run.isFinished()){
try {
Thread.sleep(100L);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
Hier wird der gleich folgende Thread gestartet, und nach System.in.read zum stoppen aufgefordert,...
Java:
package ***.javamysterien.M122;
public class Mysterium122Runnable implements Runnable {
public volatile boolean quit = false;
private volatile boolean finished = false;
@Override
public void run() {
while(quit){
try {
Thread.sleep(500L);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("Tick-tock");
}
finished = true;
}
public boolean isFinished() {
return finished;
}
}
Das ganze arbeitet nicht wie erwartet,....
Meiner Meinung nach sollte der Ouput so aussehen:
Code:
Filips Java-mysterium #122
Tick-tock
Tick-tock
.
.
.
Tick-tock
Er sieht aber so aus:
Code:
Filips Java-mysterium #122
Es wird verhindert, dass der Thread in die run methode einsteigt.
Sobald ich irgendwas in die konsole tippe, und System.in.read returnt, beendet sich der Thread sofort (logisch).
Irgendwie machts nicht klick,....
Warum blockt nur diese Methode meinen anderen Thread?
Liebe Grüße,
Zuletzt bearbeitet: