Frage von BenStudio, 15

Wie kann ich einen Thread 2 mal nacheinander starten?

Ich habe eine Klasse Ticker, die ein Thread ist, welche ich starten will, nach einiger Zeit beenden will und danach wieder neu starten. Wie geht das? Hier mein vereinfachter Code: Danke im Vorraus!

package timertest;

public class GUI {

Ticker t = new Ticker();

public void Ticker(boolean s){
    
    if(s==true){
        t.start();
    }
    else{
        t.interrupt();
    }
}
}


package timertest;


public class Ticker extends Thread{
public void run(){
    
    int i=0;
    while(true){
        
        if(isInterrupted()){
            break;
        }
        
        try{
    
            Thread.sleep(100);
            System.out.println("Hallo "+ i++);
                
        }catch(InterruptedException e){
            interrupt();
        }
        
    }

}
}



package timertest;

public class Start {

public static void main(String[] args) {
    GUI g = new GUI();
    g.Ticker(true);
    
    try {
        Thread.sleep(1000);
    } catch (InterruptedException e) {
    }
    
    g.Ticker(false);

    try {
        Thread.sleep(10000);
    } catch (InterruptedException e) {
    }
    
    g.Ticker(true);
    
}

}
Antwort
von WhiteGandalf, 12

Aus dem bisherigen Frage-Antwort-Spiel geht - aus meiner Sicht - noch lange nicht hervor, was der Fragesteller überhaupt erreichen will.

Den Thread "NEU STARTEN" ... TUT er bereits. In seinem Frage-Beispiel-Code. "BEENDEN und NEU starten" heißt ja eben nicht "ANHALTEN und später FORTSETZEN". Letzteres wäre das, wovon "PerfectMuffin" und "Teetier" schreiben.

Eventuell müsste der Fragesteller mal ein wenig mehr äußern als "wie mache ich das"...

Kommentar von PerfectMuffin ,

Abstrakte Fragen kriegen abstrakte Antworten.

Antwort
von PerfectMuffin, 15

1. if(s==true) ist Bullshit. Der Ausdruck ist äquivalent zu if(s).

2. Wenn ein Thread einmal gelaufen ist, ist er tot. DU musst entweder verhindern, dass er gestoppt wird, ihn pausieren, oder einen neuen starten.

Kommentar von TeeTier ,

Wenn ein Thread einmal gelaufen ist, ist er tot.

Der arme Thread. :)

Noch schlimmer ist es bei der Systemprogrammierung unter Unix. Dort muss man manchmal "Children" killen, und wenn man die Leichen dann nicht mit waitpid() o.ä. einsammelt, werden die sogar noch zu Zombies!

Parallelprogrammierung ist schon brutal! :)

Kommentar von TeeTier ,

Sorry, ich habe deinen Link jetzt erst (ein halbes Jahr später) entdeckt. Sehr schön, gefällt mir! :)

Solange es Dämonen sind, geht es ja noch, aber bei armen Katzen hört der Spaß auf! ;)

Kommentar von BenStudio ,

Und wie mache ich das in diesem Fall?

Kommentar von PerfectMuffin ,

Deine Entscheidung.

Keine passende Antwort gefunden?

Fragen Sie die Community