timer.schedule -

Xander_GP

Mitglied
Hallo,

ich verwende timer.schedule( timerTask, 0, 1000 );, um nach jeweils einer Sekunde auf der Konsole, die seit dem Start verstrichene Zeit in ms auszugeben.

Java:
import java.util.Timer;
import java.util.TimerTask;

public class Test {
	
	private static long startzeit;

	public static void main(String[] args) {
		Timer timer = new Timer();

		startzeit = System.currentTimeMillis();

		TimerTask timerTask = new TimerTask(){ 
			public void run(){ 
				System.out.println(System.currentTimeMillis() - startzeit);
			}
		}; 

		timer.schedule( timerTask, 0, 1000 );
	}

}

Auf der Konsole werden zum Beispiel folgende Werte ausgegeben:
Java:
0
1014
2029
3044
4059
5074
6089
7104
8119
9134

Was ich nun nicht verstehe ist, warum jeweils ca. 1015 ms vergehen, obwohl die run-Methode doch alle 1000ms aufgerufen wird!?
 

turtle

Top Contributor
Bei mir
1
1001
2001
3001
4001
5001
6001
7001
8001
9002

Also genau 1000 Millisekunden-Differenz...

Aber das musst du NICHT genau nehmen.

Java ist kein Real-Time-System, sprich, es macht keine Garantien wie genau das Timing von solchen Abläufen eingehalten wird.

Dies kann je nach Auslastung deines Rechners und des Rechners selbst Abweichungen geben. Nur im Grossen und Ganzen versucht die JVM die Aufrufe einigermaßen zu treffen und 15 Millisekunden sind ja auch nicht schlecht, oder?
 

Xander_GP

Mitglied
Interessant, dass es bei dir so genau passt.

Bei mir sind es 1,5 Hundertstel und wenn man eine Uhr mit Sekundenanzeige damit ansteuert, lässt sich ausrechenen, wann die Sekundenanzeige eine Sekunde überspringt.

Wenn es so ist, kann man nichts machen. Wollte nur mal hören, ob ich vielleicht etwas besser machen hätte können, um das Problem zu ermeiden.
 

turtle

Top Contributor
Du kannst natürlich was dagegen tun, ist dann aber mehr Aufwand;)

Beispielsweise könntest du dir merken, das der letzte Aufruf "zu spät" (15 Millisekunden) zu spät kam und daher nun nur noch 985 Millisekunden warten zum nächsten Event musst.
 

Xander_GP

Mitglied
Es ist schon seltsam. Wenn ich das Intervall von 1000ms auf 999ms reduziere und sonst alles lasse wie es ist, springt er im Wechsel zwischen 1015 und 1000.
 

ChristianK

Aktives Mitglied
Was soll daran seltsam sein? Wenn du 1000 angibst, sind es mindestens 1000 zwischen zwei aufrufen, wenn du 999 sind es mindestens 999 zwischen zwei aufrufen.

Die Zeit, die du angibst, ist das Minimum. Alles andere obliegt dem Prozessor, ob er dich dann arbeiten lässt oder nicht. Darauf hast du null Einfluss. Null.
 

Xander_GP

Mitglied
Seltsam ist, dass es die zwei Werte, die sich abwechseln, gleich bleiben. Würde der Wert zufällig schwanken, würde es eher zu einer Erklärung passen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
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
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
K Timer Thread Allgemeine Java-Themen 8
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
Z Timer -> Thread jeden Tag ausführen Allgemeine Java-Themen 5
D Probleme mit einem Timer Allgemeine Java-Themen 6
E Timer - gleichen Task mehrfach planen Allgemeine Java-Themen 2
D Timer oder Thread, das ist hier die Frage Allgemeine Java-Themen 3
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
O Thread als Timer Interrupt Allgemeine Java-Themen 2
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

Ähnliche Java Themen

Neue Themen


Oben