Java/Thread nimmt 100% CPU

  • hi,

    wollte einen Thread machen, der auf einem bestimmten Port lauscht. Wie ich es damals in Verteilte Systeme gelernt habe mache ich das natürlich mit einer While-Schleife. Problem: Das Ding funktioniert zwar, nimmt aber 100% von der CPU-Leistung. Ist das normal, oder kann man das irgendwie anders machen? Mit der Thread Priority gehts einmal nicht, da (im Moment) noch keine anderen Threads da sind.

    Hilfts vielleicht was wenn ich diesen Thread als demon laufen lasse? Habe da nicht so richtig den Durchblick was das bringen könnte...

    mfg
    Xote

    "Gibt es ein Programm, das mir verbietet ab 0.5 Promille root-Rechte auf meinem Rechner zu bekommen?"

  • ... er versucht eben die while schleife so schnell als möglich auszuführen ... daher die 100% CPU last ...

    1. kannst du in der while schleife einen befehl ausführen (keine ahnung wie der in java heißt oder ob es den überhaupt gibt) dadurch wird anderen prozessen die möglichkeit gegeben auch etwas zu machen ... (hier bleibt die CPU last auf 100%)

    2. existiert vielleicht die möglichkeit ein "Wait" auszuführen das deine schleife für einige millisekunden warten lässt ... (dann sollte die CPU last nicht mehr auf 100% sein)

  • Hm, ich hab jetzt nur kurz in meinen alten Sourcecode geschaut, ohne es zu testen, aber im Grunde genommen müßte eigentlich die ServerSocket.accept() Methode blockieren, bis sich am Port irgendwas tut...

    http://java.sun.com/j2se/1.4.2/doc…t.html#accept()

    Bei nem Datagram/MulticastSocket sollts mit receive() ähnlich sein, vielleicht hast Du auch das Timeout zu niedrig gesetzt ?
    (MulticastSocket.setSoTimeout())

    http://java.sun.com/j2se/1.4.2/doc….html#receive()

    yast, SuSEconfig, apt-get and rpm - the 4 horsemen of the apocalypse

    Platform of insanity :: http://www.dose-xp.org

  • Im receive zustand wartet die Verarbeitung bis ein Packet einlangt (bzw. aufs Timeout), dabei wird kaum Prozessor/HDD Leistung benutzt. Du machst wahrscheinlich was falsch bei deiner Implementation....
    Weiters kannst du über wait() den Thread einbremsen.
    mfg Zentor

  • Zitat von dose

    Hm, ich hab jetzt nur kurz in meinen alten Sourcecode geschaut, ohne es zu testen, aber im Grunde genommen müßte eigentlich die ServerSocket.accept() Methode blockieren, bis sich am Port irgendwas tut...


    jaja, als Medieninformatiker hatte ich ja nur die ersten zwei Beispiele zu machen, nix mit ServerSocket ;(

    THX auf jedenfall
    Xote

    "Gibt es ein Programm, das mir verbietet ab 0.5 Promille root-Rechte auf meinem Rechner zu bekommen?"

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!