![]() |
| | Themen-Optionen | Thema durchsuchen |
| | Nach oben #1 |
| Benjamin Steininger Registriert seit: 02.06.2005 Ort: weiher im tiefsten Odenwald
Beiträge: 1.209
|
Ich wollte eigentlich nur wissen ob es ausreichend und sauber ist einfach das Programm am ende mit System.exit(0); zu beenden oder ob man sich in irgendeiner Form um selbst gestartete, eventuell noch laufende Threads kümmern sollte. Nur um kurz anzureisen um was es geht, mein aktuelles Programm initialisiert ein JFace ApplicationWindow, in der Dispatch-Loop wird beim ersten Durchlauf dann ein Thread (Refresher) gestartet der mehrere andere Threads startet. Diese Threads wiederum sind Oberservables die als Observer den View (das JFace ApplicationWindow) haben und im Hintergrund den Zustand (erreichbar / nicht erreichbar) von etwas rausfinden sollen (Socketverbindungen zu verschiedenen Ports auf verschiedenen IPs) und in der update-Methode des Views wird dann via asyncExec ein Runnable gestartet, der die passenden Änderungen am View vornimmt. Im Refresher läuft wiederum eine while(true) - Schleife i so dass die Threads zur Überprüfung der Erreichbarkeit nach einer gewissen Zeit [ mittels sleep(30000) ], wieder gestartet werden um wieder zu schauen ob der Zustand sich verändert hat. Aktuell habe ich noch bedenken, dass via System.exit(0); die Threads unter Umständen in einer falschen Reihenfolge gestoppt werden könnten und so z.b. einer der Threads versucht auf den View zuzugreifen obwohl dessen Shell/Display schon disposed wurde oder der Thread in dem er läuft schon gestoppt wurde. Muss ich mir da sorgen machen ? Oder gibt es beim beenden durch System.exit() vielleicht eine zuverlässige Reihenfolge wie alle Threads und Objekte vernichtet werden. Vielleicht hat ja jemand auch noch empfehlenswerte Online-Lektüre für einen JAVA-Einsteiger zum Thema nebenläufige Programmierung / Threads und Co. mfg robo47 |
| | |
| | Nach oben #2 |
| Martin Eisengardt Registriert seit: 30.03.2006 Ort: Pfinztal
Beiträge: 355
|
Bei System.exit(0) wird relativ abrupt alles gestoppt. Die Threads werden dann "zeitgleich" aufhören zu arbeiten. Soweit zumindest meine Erfahrung und das dürfte auch irgendwo stehen. Ob Objekte "sichtbar" zerstört werden, also finalize aufgerufen wird, ist dann nicht mehr garantiert. Der Garbage-Collector ruft in der Regel finalize auf und der kommt nach System.exit(0) gar nicht mehr zum Zug. Gängiger Weg ist es, sich die Threads zu merken und sie in der richtigen Reihenfolge zu beenden, bevor man die Anwendung sauber beendet. Dazu beispielsweise im Main-Loop des Threads auf ein Flag prüfen (das Flag sollte volatile sein), ob der Thread beendet werden soll und entsprechende Schlaf-Perioden so weit zu minimieren, dass der Thread nicht einfach nur minutenlang pennt, sondern alle 500ms oder so dieses Flag abprüft.
__________________ Open Sourcing the Online Gaming Universe PHP/SQL/Java/C++/Assembler. Seit Jahren Mitglied und Entwickler in einem der wohl größten Java-Projekte der Welt: http://weblogs.java.net/blog/hansmul...e_desktop.html Geändert von mepeisen (13.04.2008 um 02:04 Uhr) |
| | |
| | Nach oben #4 |
| Benutzer Registriert seit: 11.06.2005
Beiträge: 36
|
Hallo, ich würde mir einen Thread-Pool schreiben und an der JVM einen Shutdown-Hook anhängen, also einen Thread welcher vor dem Beenden der JVM ausgeführt wird, und dieser beendet dann unter Verwendung des Thread-Pools deine Threads in gewünschter Reihenfolge. http://www.dpunkt.de/java/Programmie...ogramms/9.html Viele Grüße Ralf |
| | |
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | Thema durchsuchen |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Apache kann nicht gestartet werden. | Jan | Tools, Server, Betriebssysteme | 11 | 23.11.2006 09:26 |
| Threads semantisch korrekt, aber auch übersichtlich auflisten | Ben | HTML, XML und CSS | 13 | 09.10.2006 19:48 |
| [Umfrage] Bewertung von Threads | Ben | Archiv | 19 | 21.07.2006 18:02 |
| Threads nun als PDF-Datei anzeig-/herunterladbar | Ben | Archiv | 15 | 15.11.2005 19:29 |
| warten auf Threads und Aufbau GUI | desaster | Allgemeine Java-Programmierung | 7 | 07.09.2005 14:55 |