Impressum · Kontakt · Hilfe
Besucher online · Mitglieder



Portal > Foren > Java > Allgemeine Java-Programmierung > Noch laufende Threads am Programmende
Antwort
 
Themen-Optionen
Alt 13.04.2008, 00:58   Nach oben    #1
robo47
BIN EIN KRASSA HELD!!!111
 
Benutzerbild von robo47
 
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.188
Standard Noch laufende Threads am Programmende

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
robo47 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 13.04.2008, 02:02   Nach oben    #2
mepeisen
Erfahrener Benutzer
 
Registriert seit: 30.03.2006
Ort: Pfinztal
Beiträge: 355
Standard

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).
mepeisen ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 14.04.2008, 18:27   Nach oben    #3
robo47
BIN EIN KRASSA HELD!!!111
 
Benutzerbild von robo47
 
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.188
Standard

Okay, das werde ich mal versuchen umzusetzen.

Danke
robo47 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.05.2008, 22:58   Nach oben    #4
rath
Benutzer
 
Registriert seit: 11.06.2005
Beiträge: 33
Standard

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
rath ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.
Trackbacks are An
Pingbacks are An
Refbacks are Aus

Ä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


Alle Zeitangaben in WEZ +2. Es ist jetzt 17:10 Uhr.

Nach oben
Wir nutzen das Zend Framework, vBulletin (vBulletin v3.7.2, Copyright ©2000-2008, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.0.0) und vBSEO.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44