Announcement

Collapse
No announcement yet.

While Schleife und Wait/Sleep

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • While Schleife und Wait/Sleep

    Hallo,

    bin gerad am lernen von JBuilder. Bei Delphi kann man mit Sleep(1) in einer Schleife verhindern, daß die CPU-Auslastung auf 100 % klettert. Wie geht das in einer JBuilder-Applikation? Ich hab es mit Wait versucht, aber das möchte er nicht.

    MfG
    Sebastian

  • #2
    Hallo Sebastian,<br>
    Ein Java-Programm wird auf der Java Virtuellen Maschine (JVM) ausgeführt. Diese kümmert sich darum, den Threads Zeitscheiben zur Verfügung zu stellen und verwaltet auch den Speicher. Wieviel Ressourcen die JVM wiederum vom Betriebssystem erhält, ist Sache des Betriebssystems.
    Soll heißen: Kümmere Dich nicht um die Auslastung, sondern überlasse das der JVM.
    Wenn Du ein Multi-Threading-Programm entwickelst, kannst Du (und mußt Du unter Umständen) Einfluß nehmen, indem Du Deinen Threads verschiedene Prioritäten zuweist, einen Thread seine Ressourcen abgeben läßt, wenn er gerade nicht (sinnvoll) weiterarbeiten kann, usw...
    <br>
    In der Hoffnung, geholfen zu haben,
    Stefa

    Comment


    • #3
      Hallo Stefan,

      danke für Deine Antwort, ABER: Ich benutze keine Threads und wenn ich den folgenden Code ausführe, bleibt das Programm stehen und die Auslastung ist 100%. In Delphi würde ich einfach den Befehl Sleep(10) am Ende ausführen und das Programm würde wieder leben. Wie geht es aber in Java? Scheinbar muss ich mich doch darum kümmern oder wie siehst das??

      public void jButton1_actionPerformed(ActionEvent e)<br>
      {<br>
      SimpleDateFormat formatter = new SimpleDateFormat("'Uhrzeit:' HH:mm:ss 'Datum:' d.MM.yyyy");<br>
      while (true) {<br>
      jLabel1.setText("Uhrzeit: " + formatter.format(new Date()));<br>
      jLabel1.repaint();<br>
      wait(cwait);<br>
      <br>
      }<br>
      }<br>

      <br>
      <br>
      <br>
      MfG
      Sebastia

      Comment


      • #4
        Hallo Sebastian,<br>
        Jetzt verstehe ich, was Du machen willst.
        Erst einmal: auch wenn Du nicht explizit Threads programmierst, hast Du einen, nämlichen den Thread, der mit Start der main-Methode loslief.
        Den aktuell laufenden Thread kannst Du mit <i>sleep(millisekunden)</i> schlafen legen. Aber das ist gar nicht das, was Du willst, denn wenn Dein Programm nur in einem Thread läuft und Du legst diesen schlafen, schläft Dein Programm.
        Wenn ich Dein Programmausschnitt richtig verstehe, willst Du eine sich ständig aktualisierende Zeitanzeige haben und nebenbei im Programm etwas anderes machen. Dafür brauchst Du einen eigenen Thread für die Zeitanzeige. Das ist im Prinzip einfach. Du schreibst eine Klasse, die das Interface Runnable implementiert. Diese hat nur eine Methode: run(). In diese schreibst Du den Code für die Uhr. Diesen Thread startest Du dann aus dem "Hauptprogramm" folgendermaßen:

        Runnable uhrRunnable = new UhrzeitRunnableImpl();
        Thread t = new Thread(uhrRunnable);
        t.start();

        Noch ein Hinweis: Swing ist nicht thread-save.
        Ich würde einfach mal ausprobieren, wie es klappt und aussieht, also b es flackert oder ähnliches.

        Wenn noch etwas unklar ist, melde Dich noch mal.

        In der Hoffnung geholfen zu haben,
        Stefa

        Comment


        • #5
          Mit Java 5 gibt es auch java.util.concurrent.Executors, was in diesem Fall
          auch nützlich sein könnte. Ebenfalls interessant sind die Klassen
          java.util.Timer und javax.swing.Timer ..

          Comment


          • #6
            Stimmt. Guter Hinweis.
            Dem Timer kann man z.B. sagen, in welchen Abständen er erneut tätig werden soll. Damit könnte man z.B. in Intervallen von in etwa einer Minute die anzeige aktualisieren. "in etwa" deshalb, weil Du keine Garantie hast, daß die JVM dem Thread rechtzeitig die Ressourcen zuweist. Wenn viel zu tun ist, könnte der Thread vielleicht eine halbe Sekunde später laufen oder so ähnlich. Aber das ist in der Praxis in der Regel irrelevant

            Comment

            Working...
            X