jede Stunde Methode ausführen

27sharp

Mitglied
Hallo, ich habe eine Methode geschrieben, die von einer Website Daten liest.
So nun möchte ich, das es nur jede Stunde ausgeführt wird.
Ich habe schon etwas über timer gelesen aber so richtig weiß ich es noch nicht.

Kann mir da einer weiterhelfen?
Es sollte möglichst Ressourcen sparend sein, da es auf einem Raspberry Pi laufen wird.
 
Zuletzt bearbeitet:
Am einfachsten wäre es wenn du java.util.Date nutzt. Dort bekommst du die aktuelle Zeit, speicherst diese in einer Variable ab und lässt z.B einen Timer regelmäßig prüfen ob die aktuelle Zeit = alte Zeit + 1 Stunde ist. Das sollte problemlos umgesetzt werden können.

Einige Beispiele und ANregungen gibt es hier: Galileo Computing :: Java ist auch eine Insel – 15 Raum und Zeit wenn du dieses Kapitel durchgelesen hast solltest du dein Problem selbstständig lösen können und hast einiges gelernt. Durch vorgefertigte Lösungen kommt man leider nicht sehr weit. Wenn dann doch noch Fragen offen sind melde dich einfach.
 
Oder selbst sowas schreiben?

Java:
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;

public class Scheduler {
  public static void main(String... args) {
    Scheduler s = new Scheduler();
    s.schedule(() -> System.out.println(DateTimeFormatter.ISO_LOCAL_TIME.format(LocalDateTime.now())), 0, 3, TimeUnit.SECONDS);
    try {
      TimeUnit.SECONDS.sleep(15);
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
    s.shutdown();
  }
  
  private ScheduledExecutorService executor;
  private ScheduledFuture<?> task;
  
  public Scheduler() {
    executor = Executors.newSingleThreadScheduledExecutor();
  }
  
  public void schedule(Runnable r, long delay, long period, TimeUnit unit) {
    if (task == null) {
      task = executor.scheduleAtFixedRate(r, delay, period, unit);
    }
  }
  
  public void stop() {
    if (task != null) {
      task.cancel(true);
      task = null;
    }
  }
  
  public void shutdown() {
    stop();
    executor.shutdown();
  }
}

In deinem Fall eben TimeUnit.HOURS.
 
Zuletzt bearbeitet:
Am einfachsten wäre es wenn du java.util.Date nutzt. Dort bekommst du die aktuelle Zeit, speicherst diese in einer Variable ab und lässt z.B einen Timer regelmäßig prüfen ob die aktuelle Zeit = alte Zeit + 1 Stunde ist.
Ähm, also wenn man schon mit einem Timer arbeitet, dann kann man den auch gleich jede Stunde die Aktion ausführen lassen, anstatt nochmal auf einen Zeitablauf zu prüfen. Das ist doppelt gemoppelt, und somit Murks.

Oder selbst sowas schreiben?
[ellenlanges Java-Programm]
Und das soll eine kurze, einfache Lösung sein? Ein kompletter Scheduler, nur um "1* pro Stunde" genau eine spezielle Tätigkeit durchzuführen? Da erschrecken ja die Spatzen zu tode vor lauter Kanonen...
 
Zuletzt bearbeitet:

Zurück
Oben