Java: Threads sauber beenden ohne Stop()
Die Verwendung von Threads kann diverse Vorteile für die Bedienung und Performance/Parallelität bieten. Viele Entwickler scheuen sich jedoch vor der Anwendung, denn Threads erfordern auch das sogenannte thread-safe programming. Gerade in den Anfängen fliegen einem daher nur so die Exceptions um die Ohren. In dem Artikel beschäftigen wir uns mit dem Thema, wie ein Thread sauber beendet wird – ohne Verwendung der Stop-Methode, welche ohnehin als deprecated deklariert ist.
Die Idee hinter diesem Verfahren ist einfach: Der Thread läuft solange, bis das Flag (bShouldStop) auf true gesetzt wird. Damit die Zugriffe sauber ablaufen, werden lesende und schreibe Zugriffe über Getter-/Setter-Methoden gekapselt. Um den gleichzeitigen lesenden und schreibenden Zugriff zu vermeiden, erhalten beide Methoden noch eine synchronized-Direktive.
Der Thread wird dann ganz normal erzeugt und gestartet:
Zum Beenden des Threads wird nachfolgender Quellcode verwendet. Im Gegensatz zur direkten Terminierung des Threads kann das genannte Verfahren dazu führen, dass der Thread nicht sofort beendet wird, sondern erst seine Arbeit sauber beendet. Das ist natürlich kein Fehler und der Vorgang sollte immer so ablaufen, als Entwickler muss man dies jedoch innerhalb des Threads berücksichtigen. D.h., dass es eventuell sinnvoll ist, zusätzliche Prüfungen innerhalb der while-Schleife auf this.isClosing() einzufügen und dies entsprechend zu behandeln.


