[Java] Wird ein Thread automatisch interrupted, wenn alle Aufgaben in ihm erfüllt sind?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet
Wenn alle Aufgaben in diesem Thread erledigt wurden, würde der Thread ja immer weiter laufen, wenn man ihn nicht unterbricht

Das ist schlicht falsch.

https://stackoverflow.com/questions/29863991/threads-ends-when-run-finish

Solang du keine Endlosschleife produzierst musst du dir über Zombiethreads keine Gedanken machen.

Endet der Hauptprozess, dann enden auch alle Threads des Prozesses.

Die stop() Methode ist deprecated und ein interrupt setzt intern nur ein Flag im Thread und löst eine Exception aus.

Es ist die sauberste Methode, wenn der Entwickler dafür sorgt, dass ein Thread in Endlosschleife sich selbst beendet, wenn eine bestimmte Variable gesetzt ist, oder andere gewünschte Bedingungen erfüllt sind.

Woher ich das weiß:Berufserfahrung – Berufserfahrung

verreisterNutzer  26.07.2022, 16:40

Wenn der Thread erst durch eine Aktion des Users beendet werden soll (z. B. beim Drücken einer Taste), welche Art wäre dann schlauer? stop() oder interrupt()?

Denn für interrupt() kann man ja seine eigene Fehlermeldung konstruieren oder ganz auslassen.

0
TheQ86  26.07.2022, 16:43
@verreisterNutzer

Nix von beidem. stop() sollte man nicht mehr verwenden. kann man machen, wird aber von abgeraten, darum auch deprecated. Interrupten kann man machen. Wenn die gefangene InterruptedException nix tut, dann endet natürlich auch der Thread. Das ist aber unsauber.

Sauber wäre, dass man eben dafür sorgt, dass das Ende der run() Methode erreicht wird.

Wenn du innerhalb einer Endlosschleife bist, dann kannst du diese zB. durch break verlassen.

1
TheQ86  26.07.2022, 17:25
@verreisterNutzer

Nein, eher so:

while(true) {
  // do some stuff
  if (bla) {
    break;
  }
}

Alternativ kannst du auch eine Abbruchvariable verwenden:

boolean shouldRun = true;

while (shouldRun) {
  // do some stuff
}

Damit kontrollierst du mit der Variablen shouldRun, ob er noch mal in die Schleife gehen soll.

Auf welche Art und Weise du das machst ist halt abhängig von deinem gewünschten Szenario. Mal passt das eine besser, mal das Andere

1
verreisterNutzer  26.07.2022, 17:27
@TheQ86

Ach Mensch, ich hab die Abfrage vergessen mit reinzukopieren xD

if (X.getClickCount() == COUNT) {
    new STOP(X);
    break;
}
0

Hey,

am sauberstes wäre es, einfach das Ende der run() Methode zu erreichen, da sich der Thread dann automatisch korrekt beendet. Das nutzen von .stop() oder .interrupt() ist nicht nötig und auch nicht sinnvoll.

In deinem Beispiel wird der Thread bereits, nach Vollendung aller Aufgaben, automatisch beendet.

Mfg Jannick (L1nd)

Woher ich das weiß:eigene Erfahrung

Wenn du am ende der Funktion ankommst wird der Thread automatisch beendet.