Kommandozeilen-Programm unendlich lang ausführen

DStrohma

Bekanntes Mitglied
Hi an alle,

folgende Situation: Ich habe ein Kommandozeilen-Programm und das soll nicht terminieren. Also ewig weiter laufen. Aber wie mache ich das? Ich habe sowas hier:

Java:
        while (true) {
            try {
                new Thread().sleep(5000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

Aber ich kann mir gerade nicht vorstellen dass man das normaler Weise so macht :) Da meine Anwendung wirklich nicht terminieren soll und auf einem Server laufen wird, wäre ich froh wenn mir jemand eine Idee geben könnte wie man sowas im Normalfall macht.

DANKE im Voraus,
DS

PS: Das Programm wartet bis eine XMPP Nachricht ankommt, danach wird die verarbeitet und das Programm wartet auf die nächste Nachricht.
 

DStrohma

Bekanntes Mitglied
Das hatte ich soweit auch aber mir kam es so vor als würde meine CPU Auslastung ziemlich nach oben geschraubt werden durch die while(true) Schleife. Deshalb hab ich da noch diesen neuen Thread schlafen gelegt.

Meinst du das ist egal ob in der Schleife noch was drin steht oder nicht?
 

XHelp

Top Contributor
Wie wartest du denn auf eine Nachricht? Normalerweise sollte sowas blockieren.
Nein, das ist nicht egal. Eine leere while(true) Schleife ist eine nutzlose Endlosschleife.
 

DStrohma

Bekanntes Mitglied
Es gibt einen PacketListener der zu einer XMPPConnection hinzugefügt wird. Das wartet dann (erfolgreich) auf eine Nachricht und wenn eine ankommt, dann wird sie verarbeitet. Aber das ist kein Grund das Programm nicht zu terminieren.

Ich verwende die Smack API
 

DStrohma

Bekanntes Mitglied
Ja ich könnte das auch verwenden. Vielleicht so in der Art??

Java:
        PacketCollector collector = connection.createPacketCollector(filter);

        // Run forever
        while (true) {
            Packet packet = collector.nextResult();
            if (packet instanceof Message) {
                Message msg = (Message) packet;

                // ...
            }
        }

Das würde wohl auch gehen. Jetzt muss ich aber schon mal blöd fragen: Ist das jetzt wirklich besser :oops:
 
D

despikyxd

Gast
omg ... das ist schonwieder ein so genialer FAIL

new Thread().sleep()

ähm ja ...
kumpel .. ich verrat dir mal was ... durch genau so einen blödsinn schraubst du deine system-auslastung nach oben ... weil die while() macht nichts weiter als ohne unterbrechung neue threads zu erstellen ...
wenn du deine while() durchsowas zeitweise "unterbrechen" willst ... dann musst du die komplette while in einen Thread *oder halt ein Runnable* packen und dann darin this.sleep() aufrufen ...
und wehe du fragst jetzt wie das gemacht wird ... dafür gibt es google ...

und wie oben bereits gesagt ... solche api's sollten normalerweise blockieren bis das erwartete event eintritt ... von daher sollte die auslastung sehr gering bleiben ...

und das mit dem NICHT TERMINIEREN ... was meinst du wohl wie die meisten server-apps arbeiten ... eben genau mit solchen endlos-schleifen ... anderst wäre es auch nicht machbar ... und ist es auch nicht in irgendwelchen anderen sprachen ...
von daher ist deine "sorge" um die auslastung völlig fehl am platz ...


btw : das thema sollte mal ins NETZWERK-forum verschoben werden weil es doch etwas mehr damit zu tun hat
 

DStrohma

Bekanntes Mitglied
Mir ist schon klar dass ich damit jedes mal einen neuen Thread erstelle. Aber ich hätte angenommen dass wenn die Threads nicht gebraucht werden, dass sie dann ziemlich schnell vom Garbage Collector wieder vernichtet werden. Außerdem habe ich das nur gemacht weil die Auslastung mit einer while(true) Schleife bei meinem System höher ist als mit Thread().sleep
 
Zuletzt bearbeitet:

eRaaaa

Top Contributor
Ach was solls, mir ist die Lust vergangen aber danke für die Hilfe!

Du lässt dich zu schnell entmutigen. Ist doch okay wenn man nachfragt. despikyxd hat zwar Recht, man kann sich aber auch netter ausdrücken!
Deine Antwort auf seine Anmerkung macht allerdings in Hinsicht auf deine Problematik nicht viel Sinn :)

"Außerdem habe ich das nur gemacht weil die Auslastung mit einer while(true) Schleife bei meinem System höher ist als mit Thread().sleep" - verstehe ich leider nicht!

Ich kann jetzt auch nicht wirklich erkennen was jetzt deine noch offene Frage ist, die noch nicht beantwortet wurde. Ob sich jetzt die CPU Auslastung verbessert hat durch den Collector(der ja wartet) kannst du doch selbst leicht testen, aber ich denke ja, das ist hier der Weg den du gehen wolltest.
Ansonsten kannst du ja auch selbst pollen, allerdings wissen wir ja nicht was du genau machen willst.

p.s.: ich soll dir von Eldorado ausrichten : "dein Blog geht nicht" :)
 

DStrohma

Bekanntes Mitglied
Ich meinte damit, dass bei mir die Auslastung mit einer reinen while(true) Schleife höher war als wenn ich eine while(true) Schleife habe in der eben ein Thread erzeugt wird der schläft. Zumindest zeigt mir das meine CPU Auslastung so an.

Das mit dem PacketCollector war ein guter Tipp. Ich wollte letztlich nur wissen ob man das in einem produktiven Umfeld wirklich mit einer while(true) Schleife macht (kommt mir als Neuling einfach primitiv vor) und ob ich das richtig verstanden habe dass ich den collector dann einfach in die while Schleife packen kann.

Doch der Blog geht schon aber nicht wenn man einfach nur die Adresse eingibt, das wäre ja langweilig ;) Aber du darfst dich gerne an meinem neuen Spielplatz umsehen: Home - CRACKBABY - Because life is a game
 
D

despikyxd

Gast
das sich die cpu-last senkt ist nur ein trügender schein ...
jedem prozess wird eine gewissen cpu-zeit zugeteilt ... und wenn du die zeit die du dann effektiv im cpu rechnest damit verschwendest threads zu erstellen die dann schlafen belegen diese threads die cpu-zeit des prozesses die dann für andere wichtigere operationen nicht mehr zur verfügung steht ... so senkt sich die cpu-last da du einen großteil der cpu-zeit damit verschwendest eben zu schlafen *sleep* .. und das bisschen was überbleibt wird in die erstellung von threads gepackt ... was halt nicht wirklich ne last is ...
wenn du dagegen mit methoden-aufrufen die blockieren die zeit sinnvoller nutzt in dem du halt wirklich darauf wartest das die blockierende methode endlich returnt ist das wirklich resourcen schonender als wenn du dauernt methoden pollen würdest die nicht blockieren ...
 

Antoras

Top Contributor
Du sollst auch nicht einen neuen Thread erzeugen und den dann schlafen legen sondern den momentan Aktiven: [c]Thread.sleep(1);[/c]
1 ms sleep-time reicht vollkommen aus um die CPU nicht unnötig zu belasten, wobei du den Wert natürlich beliebig anpassen kannst. Nur halt nicht auf 5s, wie im Anfangspost dargestellt, das würde nämlich dafür sorgen, dass dein Server übelst laggt...

Und ja, eine Schleife ist gängige Praxis. wie willst du es auch sonst machen? Wobei ich nicht empfehlen würde wirklich eine Endlosschleife zu erstellen, sondern eine Schleife, die einen Wahrheitswert überprüft: [c]while (isRunning)[/c] Das gibt dir immer die Möglichkeit das Programm "normal" zu beenden und es nicht gleich mit System.exit() zu massakrieren (jedes Programm muss irgendwann mal beendet werden. Und wenn es nur zum Warten des Servers ist).

Selbst wenn du ein Framework oder eine Lib benutzt und damit nicht selbst eine Schleife erstellen musst - sie ist dennoch vorhanden. Nur halt eben im genutzten Unterbau "versteckt".
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Kommandozeilen Argumente Verzweigung Allgemeine Java-Themen 2
S Java Kommandozeilen - Client Allgemeine Java-Themen 3
Jose05 Umgang mit Exceptions in einen Programm Allgemeine Java-Themen 2
E Output Fehler (Java-Programm Kuchen) Allgemeine Java-Themen 11
S Java Programm lässt sich vom USB-Stick starten, aber nicht von HDD Allgemeine Java-Themen 16
R Programm führt Methoden gleichzeitig aus Allgemeine Java-Themen 2
T Der Aufruf von CMD-Programm Allgemeine Java-Themen 30
A Java Programm erstellen hilfe Allgemeine Java-Themen 10
Mike80 Processing Programm fiert ohne Arduino ein Allgemeine Java-Themen 2
B Mysteriöse Ergebnisse beim Baccarat Programm? Allgemeine Java-Themen 13
districon Programm zum Durchsuchen von (Ebay-)Artikeln Allgemeine Java-Themen 1
T Addons im eigenen Programm Allgemeine Java-Themen 1
Calli11 Was muss ich hier in die Main schreiben, damit das Programm ausgeführt wird? Allgemeine Java-Themen 4
S .exe Datei/Programm auslesen? Allgemeine Java-Themen 2
S Formel für Sonnenwinkel in ein Programm überführen Allgemeine Java-Themen 11
Alex_99 Programm stürzt beim Aufruf der Funktion ab? Text ausgeben Allgemeine Java-Themen 45
B Java Programm auf virutellem Desktop laufen lassen? Allgemeine Java-Themen 1
L Java überprüfen lassen, ob sich ein gegebener Pfad / das Programm an sich auf einer CD oder Festplatte befindet Allgemeine Java-Themen 14
Tiago1234 Warum hängt sich mein Programm auf? Allgemeine Java-Themen 22
D Programm designen Allgemeine Java-Themen 1
S Folgendes Problem bei einem Programm Allgemeine Java-Themen 1
J c Programm läuft nicht in compilierter Version des Java Projektes Allgemeine Java-Themen 7
O 2D-Grafik BioFarben-Programm soll auf Vollbild schalten Allgemeine Java-Themen 1
S Nachrichten Filter Programm Allgemeine Java-Themen 14
S Programm schreiben, das mir aufgrund von Schlagwörtern, die ich im Internet suche, relevante Themen sofort anzeigt. Allgemeine Java-Themen 1
T Hilfe bei Programm. IDE: Eclipse mit EV3-Plugin, lejos Allgemeine Java-Themen 8
Lukas2904 Swing Anzeigen lassen das das Programm geschlossen wurde Allgemeine Java-Themen 3
TechnikTVcode Mail Programm Allgemeine Java-Themen 2
S Programm entwickeln, welches ein Dreieckspuzzle lösen kann Allgemeine Java-Themen 5
R Lesen von Interfaces (Programm Vervollständigen) Allgemeine Java-Themen 10
Dann07 Java-Programm findet DLLs nicht! Allgemeine Java-Themen 20
OSchriever Linux-Programm öffnen Allgemeine Java-Themen 6
P USER Management in SQL übergreifend auf JAVA Programm Allgemeine Java-Themen 41
L Eclipse Konsole im exportierten Programm Allgemeine Java-Themen 2
OSchriever Programm über Linux-Kommandozeile ausführen Allgemeine Java-Themen 20
D Verkauf von einem Programm welches ich in Java geschrieben habe Allgemeine Java-Themen 4
M Programm erkennt String aus .txt Datei nicht Allgemeine Java-Themen 3
P Erstelltes Programm ist doppelt so groß Allgemeine Java-Themen 11
N Programm nach Abschluss neustarten lassen Allgemeine Java-Themen 6
S Einfaches Programm programmieren Allgemeine Java-Themen 5
M kleines KI Programm Idee Allgemeine Java-Themen 7
D Boolean von ein anderem Java Programm während der Laufzeit ändern Allgemeine Java-Themen 23
L Excel Datei löscht sich selbst im Programm - Java Allgemeine Java-Themen 3
I File ausführen und mein Programm bearbeiten lassen Allgemeine Java-Themen 11
ralfb1105 Starten Java App(s) (.jar) aus einem Java Programm Allgemeine Java-Themen 18
temi Java Programm aus einer DB laden und starten Allgemeine Java-Themen 2
N Programm startet nicht, nur per cmd Allgemeine Java-Themen 5
J Programm zum Suchen eines Wortes im Dateisystem Allgemeine Java-Themen 4
E Java Programm mit Clients erweitern - Möglichkeiten? Allgemeine Java-Themen 2
Joker4632 Methoden Befehl an bereits extern geöffnete Programm-spezifische Konsole senden Allgemeine Java-Themen 1
M Dieses Programm schneller machen? Allgemeine Java-Themen 2
R Programm zur Rekursion Allgemeine Java-Themen 5
N Quicksort Programm hängt sich auf Allgemeine Java-Themen 6
S Compiler-Fehler Programm verhält sich in Eclipse anders Allgemeine Java-Themen 1
B Input/Output Programm zum Auslesen/Beschreiben von Textdateien, wie Geschwindigkeit erhöhen? Allgemeine Java-Themen 18
dereki2000 Programm veröffentlichen Allgemeine Java-Themen 14
mrbig2017 Threads Chat Programm mit Threads? Allgemeine Java-Themen 2
M Suche aktuelle Apache Poi Bibliothek zum Einbinden in mein Programm Allgemeine Java-Themen 2
J Java "Bank Programm" Brauche eure Hilfe Allgemeine Java-Themen 3
S Java Programm (Spiel mit den Boxen) Allgemeine Java-Themen 1
kodela Programm hängt in der Ereigniswarteschlange Allgemeine Java-Themen 13
A Java Programm verbessern/vereinfachen Allgemeine Java-Themen 20
P Programm darf nicht mehrfach startbar sein Allgemeine Java-Themen 16
S Programm hängt sich manchmal (selten) auf Allgemeine Java-Themen 9
JavaNewbie2.0 Programm nicht im Taskmanager schliesen können Allgemeine Java-Themen 15
J XML Datei mit installiertem Programm öffnen Allgemeine Java-Themen 7
Arif Input/Output Dateien im Jar-Programm speichern Allgemeine Java-Themen 12
H Java FX 2 Fragen um Programm in mehrere sprachen zu übersetzen in Gluon Framwork Allgemeine Java-Themen 3
JavaNewbie2.0 Programm bleibt "stehen" Allgemeine Java-Themen 2
JavaNewbie2.0 Start eines Anderen Programm erkennen Allgemeine Java-Themen 6
E Mit Java ein Python Programm starten Allgemeine Java-Themen 20
Q-bert Daten von Java Programm speichern Allgemeine Java-Themen 4
Aruetiise Methoden .jar mit Programm öffnen Allgemeine Java-Themen 2
C anderes Programm schließen! Allgemeine Java-Themen 5
C Webseiten Programm problem Allgemeine Java-Themen 5
E Programm auf Installation prüfen Allgemeine Java-Themen 1
J Programm zum Download von CSV-Dateien Allgemeine Java-Themen 4
E Programm ohne Windowsrand(Vollbild) ? Allgemeine Java-Themen 5
G Programm, das nach abgearbeiteter main Methode weiterläuft Allgemeine Java-Themen 72
P Schnittstelle java Programm zu Webserver / Browser Allgemeine Java-Themen 2
J Schutz Programm Jar Exe Allgemeine Java-Themen 7
R javax.comm --> Programm funktioniert nach Export nicht mehr Allgemeine Java-Themen 0
Blender3D Java Swing Programm Windows 10 Autostart Problem Allgemeine Java-Themen 2
U Input/Output Warum wirft mir das Programm diesen Fehler? Allgemeine Java-Themen 6
X jvm exception abfangen und an externes Programm schicken Allgemeine Java-Themen 4
B Programm updaten mit FXLauncher Allgemeine Java-Themen 1
D Nicht quelloffenes Programm Allgemeine Java-Themen 5
F Java-Programm lizensieren Allgemeine Java-Themen 21
I Programm im Hintergrund bei Windows zur Steuerung der Tastatur nutzen Allgemeine Java-Themen 2
X Aus Programm "Installationsprogramm" machen Allgemeine Java-Themen 6
T Java Programm in Internetseite? Allgemeine Java-Themen 4
T Java Programm frisst RAM Allgemeine Java-Themen 6
H Alter Java-Programm läuft nicht mehr. Laut strace fehlt libpthread.so.0 Allgemeine Java-Themen 3
H Runtime reagiert erst wenn Programm abbricht Allgemeine Java-Themen 1
E Exceptions abfangen und dann Programm stoppen - aber wie? Allgemeine Java-Themen 2
Neumi5694 Offenes Programm nutzen Allgemeine Java-Themen 4
L Java-Programm Zahlenkombinationen ausgeben Allgemeine Java-Themen 10
KaffeeFan Methoden Suche Methode um Programm kurz warten zu lassen Allgemeine Java-Themen 22
J Programm meldet "Keine Rückmeldung" nach Verbindung zum Server Allgemeine Java-Themen 4
T Java Programm sauber beenden (Mac OS) Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben