isInterrupted();

Status
Nicht offen für weitere Antworten.

ulr!ch

Bekanntes Mitglied
Hey JavaGemeinde,

ich habe mal einen neuen "Thread" aufgemacht, weil sich das Thema irgendwie geändert hat.
Wie kann es dazu kommen, dass
Code:
Trial trial_abc = new Trial(/* Parameter */);
trial_abc.start();
int o=0;
while (trial_abc.isAlive()) {
  o++;
  System.out.println(o);
}
// macht dann weiter im Text

wunderbar funktioniert, wohingegen:
Code:
Trial trial_abc = new Trial(/* Parameter */);
trial_abc.start();
while (trial_abc.isAlive()) {}
// macht dann weiter im Text

nicht funzt? Wieso bleibt das zweite Beispiel nicht in der while-Schleife hängen?

By<e Ulrich
 

ulr!ch

Bekanntes Mitglied
Das sieht auch nicht Professioneller aus, oder?
Code:
Trial trial_abc = new Trial(/* Parameter */);
trial_abc.start();
while (trial_abc.isAlive()) {
  try {
    thread_xyz.sleep(1);
  }
  catch (InterruptedException ie) {
    System.out.println("IE im thread_xyz");
  }
}

Wie sieht guter Code aus?

By<e Ulrich
 
B

Beni

Gast
Beim zweiten Beispiel startest du trial_abc, nicht trial_kopfrechnen.
Also ist dieser kopfrechnen-Thread nicht am leben...

Anstelle einer Schleife wäre vielleicht Thread.join was für dich.

(Ich weiss, das mit dem interrupted-Zeugs ist ein wenig seltsam, und ich hab auch mühe damit, dass es scheinbar keinen einfachen weg gibt, auf einen Thread zu warten)
 

ulr!ch

Bekanntes Mitglied
Beni hat gesagt.:
Beim zweiten Beispiel startest du trial_abc, nicht trial_kopfrechnen.
Also ist dieser kopfrechnen-Thread nicht am leben...
Sorry, trial_abc = trial_kopfrechnen! Ich habe das bloß umbenannt, um die Gemüter nicht zu verwirren. :)
Wieso funktioniert das dann nicht?

B<ye Ulrich
PS: Mit dem join schau' ich mir jetzt mal an.
 
B

Beni

Gast
Hä, kannst du das so bennen wie es wirklich aussieht bitte. Sonst verwirrt das nochmehr :wink:

Bist du sicher, dass das derselbe Thread ist? Aufgrund des "new" würd ich das nochmal überprüfen.
 

ulr!ch

Bekanntes Mitglied
Beni hat gesagt.:
Hä, kannst du das so bennen wie es wirklich aussieht bitte. Sonst verwirrt das nochmehr :wink:

Bist du sicher, dass das derselbe Thread ist? Aufgrund des "new" würd ich das nochmal überprüfen.
Ja, bin ich. :)
Ich habe das ursprüngliche Posting nun noch einmal bearbeitet, überall steht nun "trial_abc".
Wie löst du denn in deinen Programmen das Problem mit dem Warten?

By<e Ulrich
 
B

Beni

Gast
Mit einem join, und zur Sicherheit eine Schleife rund um das join (um das join nocheinmal aufzurufen, sollte der Thead nicht wirklich tod sein).

Als Beispiel:
Code:
public class Test extends Thread{
	public void run() {
		for( int i = 0; i < 10; i++ ){
			System.out.println( i );
			
			try{
				Thread.sleep( 500 );
			}
			catch( InterruptedException e ){
				e.printStackTrace();
			}
		}
	}
	
	public static void main( String[] args ) {
		Test test = new Test();
		test.start();
		
		while( test.isAlive() ){
			try{
				test.join();
			}
			catch( InterruptedException e ){}
		}
		
		new Test().start();
	}
}
 

ulr!ch

Bekanntes Mitglied
Mir ist das irgendwie suspekt.
Ich setze die Wartezeit des Threads einfach auf die Maximaldauer, dann muss halt der User ein paar hunderstel Sekunden sich die Zeit vertreiben.
Aber dennoch danke für deine Antwort, ich lass mir das mal durch den Kopf gehen.

By<e Ulrich
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben