Thread der auf eine Queue wartet, sicher beenden

Fohnbit

Top Contributor
Hallo!

Wenn ich einen eigenen Thread habe:
Java:
public void run() {
 
            while (true) {
               Channel channel = queue.take();
                    }
  }

Wie kann ich diesen Thread veranlassen, das "queue.take()" zu beenden und den Thread zu schließen?

Einseits muss ich die while beenden und auch die Queue.

Vielen Dank!
 
Zuletzt bearbeitet von einem Moderator:
Die Queue musst du nicht beenden. Entweder nimmst du etwas aus der Queue oder nicht, sie ist nur einen "Gegenstand" mehr aber nicht.

Um ie while-Schleife zu verlassen solltest diese eine ordentliche Abbruchbedingung haben:
Java:
boolean run = true;
while (run) {
    // DEIN CODE ......
    if(Abbruchbedingung) {
        run = false;
    }
}

Und nein "break" ist keine alternative. Thread sollten auch von außen zu stoppen sein. Und das geht nun am einfachsten (und auch schönsten) mit einer entsprechenden Abbruchbedingung.
 
Hallo Joose,

vielen Dank!
Der Thread muss aus der Main Methode zu stoppen sein.

Wenn er in "queue.take()" festsitzt, hilft es auch nichts, wenn ich die Abbruchbedingung von außen auf false setze, oder?
Er würde diese ja erst ausführen, wenn wieder mal etwas in der Queue liegt ... sonst "steht" der Code ja an der Stelle(?)

Danke!
 
Dann definiere ein "Dummy"Objekt welches nur in die Queue gesteckt wird wenn etwas beendet werden soll.

Java:
Channel STOP_CHANNEL = ......
boolean run = true;
while (run) {
    Channel channel = queue.take();
    if(channel == STOP_CHANNEL) {
       run = false;
       continue;
    }
    // DEIN CODE ......
}

Eine weitere Möglichkeit wäre es statt "take" die Methode "poll" zu verwenden und ein timeout anzugeben.
Sollte X mal von Poll kein Objekt zurückgeliefert werden dann abbrechen, wird ein Objekt zurückgeliefert dann X wieder auf 0 setzen.

Den Thread einfach stoppen und eine Exception fangen wäre natürlich auch möglich. Es aber ohne Exception zu lösen wäre natürlich immer schöner.
 

Zurück
Oben