Timer -> Thread jeden Tag ausführen

Status
Nicht offen für weitere Antworten.

Zender

Mitglied
Hallo Leute,

ich möchte einen Thread meines Programms jeden Tag um eine bestimmte Uhrzeit starten.
Das Problem ist, dass ich die Laufzeit des Threads im Voraus nicht bestimmen kann, aber unbedingt verhindern will, dass 2 Threads gleichzeitig laufen.

Meine bisherige Suche hat mich auf die java.util.Timer Klasse gebracht.
Dort gibt es die Methode scheduleAtFixedRate, die meine Anforderungen erfüllt, allerdings ein Problem hat:
Kann eine Ausführung nicht planmäßig beginnen, weil noch ein Thread läuft, wird danach versucht dies aufzuholen, was ich nicht möchte:

In fixed-rate execution, each execution is scheduled relative to the scheduled execution time of the initial execution. If an execution is delayed for any reason (such as garbage collection or other background activity), two or more executions will occur in rapid succession to "catch up." In the long run, the frequency of execution will be exactly the reciprocal of the specified period (assuming the system clock underlying Object.wait(long) is accurate).
(Timer (Java 2 Platform SE 5.0))

Habt ihr eine Idee, wie ich mein gewünschtes Verhalten realisieren kann?

Viele Grüße,
Zender
 
S

SlaterB

Gast
die Verzögerung kann doch höchstens paar ms dauern, in dem Bereich ist das vielleicht interessant,
aber doch nicht beim Abstand von Stunden,
es sei denn dein PC ist den ganzen Tag zu 100% ausgelastet, wenn innerhalb von 24 Stunden 10 Aktionen zu je 3 Stunden laufen, dann muss ja alles aus den Fugen geraten ;)

abgesehen von einem eigenen Thread mit wait(zeit in ms) bleibt dir immernoch zusätzlich die Möglichkeit,
in einer Bearbeitung die aktuelle Zeit abzufragen, zu speichern und mit der Zeit der letzten Ausführung zu vergleichen,
wenn es nicht ein Tag später ist, dann aktuelle Ausführung abbrechen
 

Zender

Mitglied
Ah ok, ich glaube ich habe die Doku falsch verstanden ;)
Wenn ich sie mir jetzt nochmal angeschaue, lese ich aber nicht heraus, was passiert, wenn eben ein Thread noch läuft während der Scheduler sagt, es soll ein neuer Thread gestartet werden.

Muss ich es selbst implementieren, dass nie 2 Ausführungen gleichzeitig laufen?
 
S

SlaterB

Gast
kann ich nicht sagen, vielleicht durch testen herauszufinden,

erstelle eine Aktion, die 2 sek dauert, vielleicht durch Thread.sleep() (das meinte ich vorhin, weniger wait())
und schedule sie jede Sekunde und schau dir an was passiert
 

Ebenius

Top Contributor
Muss ich es selbst implementieren, dass nie 2 Ausführungen gleichzeitig laufen?
Nein. Ein TimerTask läuft immer nur einmal gleichzeitig. Der nächste Lauf wird frühestens begonnen, wenn der letzte geendet hat.

[...]was passiert, wenn eben ein Thread noch läuft während der Scheduler sagt, es soll ein neuer Thread gestartet werden.
Bei FixedRate: Die Ausführung wartet bis die derzeitige Ausführung geendet hat. Dann startet die nächste (jetzt natürlich verspätet). Das ganze so oft, bis die Ausführungszeit wieder stimmt.

Beispiel: Ein TimerTask soll (Fixed Rate) alle 10 Sekunden laufen. Der erste Durchlauf dauert eine Minute, jeder folgende 3 Sekunde. Das ganze läuft so ab:
  • 0:00 Der erste Durchlauf startet. Durchläufe 2-6 verspäten sich...
  • 1:00 Durchlauf 2 läuft (0:50 verspätet) Durchlauf 7 verspätet sich...
  • 1:03 Durchlauf 3 läuft (0:43 verspätet)
  • 1:06 Durchlauf 4 läuft (0:36 verspätet)
  • 1:09 Durchlauf 5 läuft (0:29 verspätet)
  • 1:10 Durchlauf 8 verspätet sich...
  • 1:12 Durchlauf 6 läuft (0:22 verspätet)
  • 1:15 Durchlauf 7 läuft (0:15 verspätet)
  • 1:18 Durchlauf 8 läuft (0:08 verspätet)
  • 1:20 Durchlauf 9 verspätet sich...
  • 1:21 Durchlauf 9 läuft
  • 1:30 Durchlauf 10 läuft
  • ... ab jetzt weiter in sync, alle 10 Sekunden...
Ebenius
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Timer Thread Allgemeine Java-Themen 8
D Timer oder Thread, das ist hier die Frage Allgemeine Java-Themen 3
O Thread als Timer Interrupt Allgemeine Java-Themen 2
W Timer terminiert nicht Allgemeine Java-Themen 5
W Timer Konzept-Frage Allgemeine Java-Themen 16
Z Timer Allgemeine Java-Themen 5
H Timer funktioniert nicht? Allgemeine Java-Themen 3
Tacofan Kurzer Timer Allgemeine Java-Themen 22
B Threads Timer wird immer schneller Allgemeine Java-Themen 6
H Consumer (Java8 Lambda) an Timer übergeben Allgemeine Java-Themen 2
wolfgang63 Best Practice Taktgeber oder Timer mit variablem Intervall Allgemeine Java-Themen 1
I Timer Allgemeine Java-Themen 1
X Timer Allgemeine Java-Themen 3
C Timer? Allgemeine Java-Themen 8
U Timer - Timertask endet nicht Allgemeine Java-Themen 4
X timer.schedule - Allgemeine Java-Themen 7
D Simpler Timer zum warten Allgemeine Java-Themen 19
H java.util.Timer und Funktion mit SQL Exception Allgemeine Java-Themen 5
G Threads Timer wird unterbrochen Allgemeine Java-Themen 20
P Java Timer Allgemeine Java-Themen 3
E Wie Timer anbringen mit Designer in Netbeans Allgemeine Java-Themen 5
M Ampelsteuerung über Timer in Java realisieren Allgemeine Java-Themen 3
O Timer pausieren Allgemeine Java-Themen 5
M Timer von nicht existiertem Objekt stopen Allgemeine Java-Themen 5
B util.Timer zu langsam? Allgemeine Java-Themen 3
P Java Timer Allgemeine Java-Themen 2
S Timer in Applet? Allgemeine Java-Themen 11
G Swing Timer führt Methode nicht aus Allgemeine Java-Themen 2
V Frage zu util.Timer (-> TimerTask) Allgemeine Java-Themen 2
P Swing Eine Sekunde warten (Timer) Allgemeine Java-Themen 7
E Timer class macht einfach garnichts :/ Allgemeine Java-Themen 6
T Timer oder Alternative? Allgemeine Java-Themen 3
D Probleme mit einem Timer Allgemeine Java-Themen 6
E Timer - gleichen Task mehrfach planen Allgemeine Java-Themen 2
A TimerTask - Task stoppen - timer.cancel() funktioniert nicht Allgemeine Java-Themen 8
S Problem mit einem Timer (Aktualisierung etc.) Allgemeine Java-Themen 2
B Timer übergabe Allgemeine Java-Themen 3
G Timer abbrechen und neu starten Allgemeine Java-Themen 3
G timer mit buttondruck abbrechen Allgemeine Java-Themen 7
T Timer oder ähnliches? Allgemeine Java-Themen 3
O Timer und TimerTask: Programm terminiert nicht! Allgemeine Java-Themen 3
C Timer.scheduleAtFixedRate(). Allgemeine Java-Themen 5
H gibts in Java sowas wie in Visual Basic den Timer? Allgemeine Java-Themen 5
B 24 Uhr Timer Task Allgemeine Java-Themen 5
G Timer nur 64 mal pro Sekunde? Allgemeine Java-Themen 18
S Frage zu jTDS, JAVA allgemein und Timer Allgemeine Java-Themen 6
L Problem mit Timer Allgemeine Java-Themen 7
J Timer-Objekt / Task-Zustand ermitteln Allgemeine Java-Themen 5
R 11 GB File lesen ohne zu extrahieren Filedaten Bereich für Bereich adressieren dann mit Multi-Thread id die DB importieren Allgemeine Java-Themen 3
urmelausdemeis Exception in thread "main" java.lang.Error: Unresolved compilation problem: Allgemeine Java-Themen 7
smarterToby Wie stoppe ich diesen Thread Allgemeine Java-Themen 4
A Thread.sleep Problem Allgemeine Java-Themen 2
J Thread started nur einmal Allgemeine Java-Themen 19
W Server-Thread schreibt nicht alle Dateien Allgemeine Java-Themen 6
OnDemand Logfile pro User / Thread Allgemeine Java-Themen 7
OnDemand Thread / Service abbrechen Allgemeine Java-Themen 3
Thallius Ist meine static Helper Class Thread save? Allgemeine Java-Themen 9
P Swing Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: npoints > xpoints.length || npoints > ypoints.length Allgemeine Java-Themen 5
B Thread.sleep() in EJB Container wie lösen? Allgemeine Java-Themen 11
S Ist das Neuzuweisen von Feldern atomic und damit Thread-Safe? Allgemeine Java-Themen 2
S Exception in thread "main" java.lang.NullPointerException at FamilienApp.main(FamilienApp.java:15) Allgemeine Java-Themen 1
J Einen Thread in einer Schleife Allgemeine Java-Themen 2
E HILFE !! Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/io/FileUtils Allgemeine Java-Themen 4
Flynn Thread-Problem... Allgemeine Java-Themen 2
G Thread-Programmierung Allgemeine Java-Themen 5
S Datei wird nicht gefunden Thread.currentThread().getContextClassLoader().getResourceAsStream() Allgemeine Java-Themen 1
G Beendet sich der Thread selbst?! Allgemeine Java-Themen 3
mrbig2017 Sleep wird ignoriert und der Thread wartet nicht Allgemeine Java-Themen 1
S Thread beenden Allgemeine Java-Themen 9
M Array aus Thread Objekten erstellen Allgemeine Java-Themen 2
Aruetiise Swing JOptionPane ohne denn Thread zu pausieren Allgemeine Java-Themen 1
M Nanosekunden-Pause innerhalb einen Thread-Loops Allgemeine Java-Themen 3
E Thread Exception Allgemeine Java-Themen 6
javaerd Binomialkoeffizient ausrechnen, Exception in thread "main" java.lang.StackOverflowError Allgemeine Java-Themen 6
T Merkwürdiges Thread-Verhalten Allgemeine Java-Themen 6
K Thread Problem Allgemeine Java-Themen 6
W Thread sleep 30 sekunden - wenn keine Antwort bis dahin neu senden Allgemeine Java-Themen 2
H Thread bleibt stehen bei jar in jar Allgemeine Java-Themen 1
J Threads HTTP Request (Thread) dauert lange - in Android Allgemeine Java-Themen 3
F CPU Last eines Thread ausfindig machen Allgemeine Java-Themen 0
V Compiler-Fehler Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 125, Size: 125 Allgemeine Java-Themen 11
Tausendsassa Threads Einen Thread sich selbst schließen lassen Allgemeine Java-Themen 17
P Threads BufferedImage, Thread Concurrency Allgemeine Java-Themen 1
M Klasse in separaten Thread ausführen.Wie genau? Allgemeine Java-Themen 2
llabusch Thread blockiert Dialog Allgemeine Java-Themen 1
J Thread wait() Allgemeine Java-Themen 2
V Thread.sleep und InterruptedException? Allgemeine Java-Themen 1
G Thread nicht von GC zerstört Allgemeine Java-Themen 6
J Wie erschaffe ich einen sicheren Datenaustausch zwischen Thread und Nicht-Threads Allgemeine Java-Themen 8
Sogomn Thread blocken bis Taste gedrückt Allgemeine Java-Themen 5
T Starten vom Thread Allgemeine Java-Themen 3
T Wait/Notify() bei Thread Allgemeine Java-Themen 6
J Exception in thread "main" java.lang.NoClassDefFoundError Allgemeine Java-Themen 4
M Exception in thread "AWT-EventQueue-0" Allgemeine Java-Themen 6
Q Thread wacht nicht auf Allgemeine Java-Themen 7
T Fragen zum Thread-Thema Allgemeine Java-Themen 4
T Threads Input/Output im Thread - Datei ohne Inhalt Allgemeine Java-Themen 1
T Fragen zum Thread-Thema Allgemeine Java-Themen 9
C Threads Variablen in einem Thread Aktualisieren Allgemeine Java-Themen 17
U Thread beenden Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben