Java Thread nach bestimmter Zeit entsprechend der Konfiguration starten

Volk

Newbie
Registriert
Dez. 2015
Beiträge
2
Hallo,

ich entwickle gerade eine Java-Client-Application. Die Aufgabe ist die Daten, die von einem Server kommen (nicht äquidistant), erstmal aufzunehmen und den Zeistempel zuzuordnen. Die Methode, die die Daten vom Server aufnimmt ist bereits implementiert. Der Client ist mit der Datenbank verbunden. In der Datenbank gibt es drei Zeitreihen mit unterschiedlichen Zeitraster (1min, 15min und 1h). In der Konfiguration vom Client kann ich dann einstellen, auf Welche Zeitreihe ich die Daten vom Server schreiben will. Wenn ich z.B. die 15min-Zeitreihe ausgewählt und den Anffang der aktuellen Viertelstunde verpasst habe, dann wird es bis zur nächsten Viertelstunde (z.B hh:00, hh:15, hh:30, hh:45) abgewartet und erst dann das Puffern der Daten gestartet. Alle anderen Daten werden dann einfach ignoriert. Ein Thread überprüft dann die Zeitstempel der Daten und nach dem Ablauf der Viertelstunde holt er die Daten für die letzten 15 Minuten und schreibt die Daten auf die Zeitreihe in der Datenbank.

Hat vielleicht jemand eine Idee, wie ich die Aufgabe unter der Beachtung der Auswahl von drei verschidenen Zeitreihen umsetzten könnte?

Ich würde für jeden Ratschlag von euch sehr dankbar sein.

Ich bin der Javanfänger und daher weißt ich nicht, wie ich das Ganze implementieren könnte.

Schöne Grüße
Volk
 
java.lang.Thread nutzt man heutzutage eher nicht mehr direkt, weil es bequemere APIs gibt. Um eine Aufgabe zeitgesteuert zu erledigen, verwendet man am besten ScheduledExecutorService

Wenn der Job nur einmal ausgeführt werden soll, sieht das etwa so aus:

Code:
ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);
timer.schedule(createJob(...), getStartTime(...), getTimeUnit(...));

Der Executor ermöglicht es aber auch etwas immer wieder auszuführen, also z.B. alle 15min etc.
 
soares schrieb:
java.lang.Thread nutzt man heutzutage eher nicht mehr direkt, weil es bequemere APIs gibt. Um eine Aufgabe zeitgesteuert zu erledigen, verwendet man am besten ScheduledExecutorService

Wenn der Job nur einmal ausgeführt werden soll, sieht das etwa so aus:

Code:
ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);
timer.schedule(createJob(...), getStartTime(...), getTimeUnit(...));

Der Executor ermöglicht es aber auch etwas immer wieder auszuführen, also z.B. alle 15min etc.

Wenn ich es jetzt richtig verstehe, kann ich mit dem ScheduleExecutorService nach einer bestimmten Verzögerung den Job starten und dann es auch wiederholen lassen. Aber wenn es jetzt die neue Viertelstunde anfängt und ich die Daten bis zur nächsten Viertelstunde puffern will, wie soll ich dann vorgehen?

Grüße
Volk
 
Was hält dich denn davon ab, die Daten in beispielsweise einer geeigneten Collection temporär abzulegen und später dem Job mitzugeben? Alternativ könnte der Job auch eine permanent bestehende Queue abarbeiten.
 
Zuletzt bearbeitet:
Volk schrieb:
Aber wenn es jetzt die neue Viertelstunde anfängt und ich die Daten bis zur nächsten Viertelstunde puffern will, wie soll ich dann vorgehen?

Du gibst dem "Job" alle relevanten Daten mit, die schon vorliegen bzw. zur Verarbeitung benötigt werden und nicht später ermittelt werden können/sollen.
 
Zurück
Oben