Zeitdifferenz von Ende - sleep(x) - Start von x abhängig

Status
Nicht offen für weitere Antworten.
M

michaNoX

Gast
Hallo,

ich beschäftige mich derzeit mit reaktionszeitmessungen und kam darüber zu Java, wovon ich leider bisher keine Ahnung habe/hatte.

Ich probiere vereinfacht folgendes:

long Anfang = System.currentTimeMillis();
Thread.sleep(limit);
long Ende = System.currentTimeMillis();
long Differenz = Ende - Anfang - limit;

Theorie dahinter: wenn Differenz nicht null, dann Verzögerung durch zu hohe Auslastung auf Rechner

nun habe ich aber bemerkt, dass die Differenz abhängig ist von limit (und das unabhängig davon, ob zeitgleich ein oder mehrere Threads).
500 --> Differenz von 0 ms
600 --> Differenz von 9-10 ms
700 --> Differenz von 3 ms
800 --> Differenz von 12-13 ms
900 --> Differenz von 6-7 ms
1000 --> Differenz von 0 ms


Wo liegt mein Denkfehler bei dem Vorgehen (dies wird in psych. Fachliteratur aber als 'guter' Filter für Fehlmessungen angepriesen -> http://psycho.hsu-hamburg.de/experimente/Marktforschung/RTviaJava.pdf) oder wo ist der Fehler im Script.

Besten Dank jetzt bereits für Eure Hinweise
Quelltexte:



Code:
public class WorkOneApp {
  public static void main(String[] args) {
    WorkOne work1 = new WorkOne("A", 500); // 0 ms
    WorkOne work2 = new WorkOne("B", 600); // 9-10 ms
    WorkOne work3 = new WorkOne("C", 700); // 3 ms
    WorkOne work4 = new WorkOne("D", 800); // 12-13 ms
    WorkOne work5 = new WorkOne("E", 900); // 6-7 ms
    WorkOne work6 = new WorkOne("F", 1000); // 0 ms

   work1.start();
   work2.start();
   work3.start();
   work4.start();
   work5.start();
   work6.start();

  }
}




Code:
public class WorkOne extends Thread {
   String name;
   int limit;

   public WorkOne(String s, int n) {
      name = s;
      limit = n;
   }
   
   public void run() {
       
       long Anfang = System.currentTimeMillis();       
             try {
                Thread.sleep(limit);
            } catch(InterruptedException e){
                System.out.println("Thread "+name+": Sleep Interrupted");
            }

            long Ende = System.currentTimeMillis();
            long Differenz = Ende - Anfang - limit;
            //System.out.println(Anfang + " -- "+Ende);
            System.out.println("Thread" +name+ " --> Differenz von in ms: "+Differenz);
        }        
    }
 
G

Gast

Gast
Naja ich würde mal sagen, dass dein Ergebnis dadurch zustande kommt, dass einfach nicht nur dein Programm die CPU verwendet. Daher kommt es halt manchmal zu Verzögerungen.

Übrigens noch ein kleiner Tipp:

In Java werden alle Variblennamen (bis auf die von Konstanten) klein geschrieben um sie von Klassen zu unterscheiden. Also Anfang --> anfang, Ende --> ende usw.
 
M

michaNoX

Gast
vielleicht soltle ich das nochmal klar herausstellen:
>> unabhängig der CPU-Auslastung kommt immer wieder bei gleicher Pausenzeit praktisch die gleiche Differenz zu stande

spricht alles weist darauf hin, dass nicht die Auslastung die Differenz verursacht, sondern die Länge der Pause!

wie kann das sein?
woran liegt das?
 
S

SlaterB

Gast
bei mir ist das genauso, wenn du es mit Zeiten
600
601
602
usw. versucht, dann wird deutlich, dass es da feste Intervalle gibt

nun kann man sich viele Möglichkeiten denken, z.B. dass nur alle 15 ms ein Thread geweckt werden kann oder ähnliches,
wenn du allerdings mit System.nanoTime() arbeitest, dann kannst du keine Regelmäigkeiten mehr feststellen,
ich vermute daher, dass es an der Ungenauigkeit von currentTimeMillis() liegt,
ein schöner Test dazu:

Code:
public class WorkOneApp
{
    public static void main(String[] args)
    {
        for (int i = 0; i < 100; i++)
        {
            for (int j=0; j<220000; j++) {}
            System.out.println(System.currentTimeMillis()+" - "+System.nanoTime());
        }
    }
}
hier zeigt die ms-Uhr fast ständig die gleiche Zeit an, nur alle 20-30 i springt die Uhr ein weiter und dann gleich um 15-16 ms
-> es gibt schlicht keine Zwischenwerte

---------

System.nanoTime() sieht genauer aus, wie weit man sich darauf verlassen kann mag ich nicht beteuern,
wenn Java wegen Betriebssystem Pause machen muss, dann auf jeden Fall auch System.nanoTime()
 
M

maki

Gast
System.nanoTime() sieht genauer aus, wie weit man sich darauf verlassen kann mag ich nicht beteuern,
wenn Java wegen Betriebssystem Pause machen muss, dann auf jeden Fall auch System.nanoTime()
Und erst wenn der GC losrennt..
 
M

michaNoX

Gast
hey

super SlaterB, thx für die Antwort - schaut sehr plausibel aus!

@ maki: der GarbageCollector ist sicher der nächste Knackpunkt mit dem ich mich auseinandersetzen muss.
hast Du mir einen einfachen Tipp (da Anfänger) wie ich diesen während ich auf eine Tasteneingabe (Zeitmessung) warte, "ausschalten / umgehen" kann.

Der kan ndanach ja genre wieder seinen Job weitermachen, doch so lange von einem definierten Zeitpunkt an keine taste gedrückt wurde würde ich gerne sicherstellen ,dass zumindest Java mir nicht dazwischenfunkt.

Alles was ich über GC über google auf die schnelle fand, war mir als Einsteiger echt zu hoch

Vielen Dank!
 

Wildcard

Top Contributor
1. Das geht mit einer Standard VM nicht
2. Der GC ist bei Leibe nicht dein einziges Problem.
Der JIT Compiler, Ungenauigkeiten im Systemzeitgeber, Scheduler des Betriebssystems und und und
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
wolei JAVA Zeitdifferenz feststellen. Java Basics - Anfänger-Themen 4
M Zeitdifferenz JTable - Lösungansatz Java Basics - Anfänger-Themen 3
Z Zeitdifferenz mit GregorianCalendar Java Basics - Anfänger-Themen 6
G Java 8 - Support-Ende Java Basics - Anfänger-Themen 7
O Warum will die MEthode noch am Ende einr eturn Java Basics - Anfänger-Themen 10
S Listen , Nodes am ende anängen Java Basics - Anfänger-Themen 6
tom.j85 Doppelte Foreach Schleife: Am Ende wird immer das Gleiche Objekt eingefügt Java Basics - Anfänger-Themen 4
S Wie ende ich mein Pogrammierung? [Hilfe] Java Basics - Anfänger-Themen 1
B Datenbank, aktuelle Ende als Zahl an Label übergeben Java Basics - Anfänger-Themen 7
T Textdatei öffnen und ans Ende scrollen Java Basics - Anfänger-Themen 11
P OOP Eingabevariablen der Klasse Raum in der Methode addEvent ans Ende einer ArrayList einfügen Java Basics - Anfänger-Themen 3
kaoZ Stil ? - ....Nein nicht das Ende des Besens ^^ Java Basics - Anfänger-Themen 11
T Warum wartet Java nicht bis die for schleife zu ende ist Java Basics - Anfänger-Themen 18
S Ende des Tages in Java berechen. Java Basics - Anfänger-Themen 3
G warum wird die Schleife nicht bis zum Ende ausgeführt Java Basics - Anfänger-Themen 10
S Vokale am Ende von Wörtern löschen Java Basics - Anfänger-Themen 7
W Threads nach Thread Ende Variablen auslesen Java Basics - Anfänger-Themen 2
S Abfragen wenn das ende einer Tabelle erreicht ist Java Basics - Anfänger-Themen 8
T Erste Schritte Ende von Wörtern in einer Zeile feststellen? Java Basics - Anfänger-Themen 5
S Input/Output Reader: "null" wenn While-Ende Java Basics - Anfänger-Themen 5
P Kann Ziffer die am Ende einer Zeile steht (.txt) nicht in int übersetzen Java Basics - Anfänger-Themen 11
G Sekunden bis zum Ende der aktuellen Kalenderwoche ermitteln! Java Basics - Anfänger-Themen 3
E Listen vereinen, wenn Elemente am Anfang/Ende übereinstimmen Java Basics - Anfänger-Themen 2
Haubitze_Broese Methode am ende nochmal startet? Java Basics - Anfänger-Themen 8
F OOP Wieder mal Zugriffsprobleme... (Lösung am Ende) Java Basics - Anfänger-Themen 11
B mit drawString direkt zeichnen, aber wie das Ende finden? Java Basics - Anfänger-Themen 3
F Cleanup bei Ende eines Threads Java Basics - Anfänger-Themen 8
B Objekt an das Ende eines Array stecken Java Basics - Anfänger-Themen 2
A Rekursion - leider ohne Ende?! Java Basics - Anfänger-Themen 2
E String am ende abschneiden Java Basics - Anfänger-Themen 6
G Befehl für Ende bei Switch-Auswahl Java Basics - Anfänger-Themen 11
G Banale Frage: While Schleife mit Bedingungsprüfung am Ende Java Basics - Anfänger-Themen 2
J An das Ende einer Datei Text anhängen Java Basics - Anfänger-Themen 2
M Am Ende eines Strings den Zeilenumbruch entfernen Java Basics - Anfänger-Themen 1
T Am Ende einer Textdatei inhalt einfügen Java Basics - Anfänger-Themen 3
S ans Ende einer Datei schreiben Java Basics - Anfänger-Themen 3
H Am ende einer existierenden Datei schreiben? Java Basics - Anfänger-Themen 8
G auf ende mehrerer threads warten Java Basics - Anfänger-Themen 2
H String an Ende einer text File anhängen Java Basics - Anfänger-Themen 2
M sting komplett bearbeiten und nicht nach zeilenumbruch ende Java Basics - Anfänger-Themen 3
Z applet mit Ende-Button beenden beim Klicken Java Basics - Anfänger-Themen 5
R Am Begin und Ende eines Strings die Leerzeichen löschen ? Java Basics - Anfänger-Themen 3
J Menü-strip beenden-knopf mit Ende des Programms belegen ? Java Basics - Anfänger-Themen 2
U offenes Ende für int[]? Java Basics - Anfänger-Themen 8
Z while (eingabe.equals("ENDE") == false) Java Basics - Anfänger-Themen 5
G in txt file text nicht am ende sondern am anfang anhängen! Java Basics - Anfänger-Themen 12
berserkerdq2 Warum muss man manchmal in der RUnmethode sleep in eine schleife tun? Java Basics - Anfänger-Themen 9
F Thread.sleep() Java Basics - Anfänger-Themen 5
S Berechnung der sleep time ist falsch Java Basics - Anfänger-Themen 46
B Threads Thread sleep() Method einfache Frage Java Basics - Anfänger-Themen 8
D Compiler-Fehler Wert auf Datenbank übertragen und Sleep Thread Java Basics - Anfänger-Themen 3
Spencer Reid JavaFX Memory Thread.sleep Java Basics - Anfänger-Themen 1
S Thread.sleep mit JProgressBar Java Basics - Anfänger-Themen 1
A Problem mit Thread.sleep Java Basics - Anfänger-Themen 4
M Thread.sleep() Funktion Java Basics - Anfänger-Themen 1
I Thread.sleep (1000); Java Basics - Anfänger-Themen 1
Lord.Djerun (Netbeans) Bei TimeUnit.Seconds,Sleep() hängt sich das komplette Programm auf.. Java Basics - Anfänger-Themen 8
S Oberfläche aktualisiert nicht wegen sleep Java Basics - Anfänger-Themen 1
S sleep Java Basics - Anfänger-Themen 4
P Threads Thread.sleep() Java Basics - Anfänger-Themen 7
C Wie funktioniert sleep Java Basics - Anfänger-Themen 5
M Fehler bei Thread.sleep() Java Basics - Anfänger-Themen 5
B Thread.sleep() Java Basics - Anfänger-Themen 1
C Thread.sleep ratsam? Java Basics - Anfänger-Themen 6
L Thread.sleep Java Basics - Anfänger-Themen 6
G problem mit thread.sleep() Java Basics - Anfänger-Themen 6
E Threads Verständnisfrage bzgl. Threads und Sleep Java Basics - Anfänger-Themen 2
M Threads Thread.Sleep Problem im Zusammenhang mit GUI/ActionPerformed-Methode Java Basics - Anfänger-Themen 4
S Methoden Warum ist sleep static? Java Basics - Anfänger-Themen 9
T Thread Sleep() Java Basics - Anfänger-Themen 4
J Thread.sleep Java Basics - Anfänger-Themen 7
A Thread.sleep() unterbrechen? Java Basics - Anfänger-Themen 3
F Sleep Funktion Java Basics - Anfänger-Themen 12
P Problem mit sleep Java Basics - Anfänger-Themen 24
S Thread.sleep () - Frage Java Basics - Anfänger-Themen 16
G Problem mit sleep() Methode Java Basics - Anfänger-Themen 7
M Frage zur Methode Thread.sleep() Java Basics - Anfänger-Themen 6
A [Fehlermeldung]Sleep-Befehl Java Basics - Anfänger-Themen 4
B Dauerschleife unterbrechen mit sleep() Java Basics - Anfänger-Themen 23
O Memory Thread.sleep() Java Basics - Anfänger-Themen 5
G Problem mit Thread Sleep! Java Basics - Anfänger-Themen 3
S Thread.sleep i.V.m Button.setText() Java Basics - Anfänger-Themen 8
G Schleife mit Thread.sleep pausieren Java Basics - Anfänger-Themen 12
M wait() sleep() geht nicht wirklich Java Basics - Anfänger-Themen 3
R Thread - sleep - interrupt Java Basics - Anfänger-Themen 18
S sleep()-Methode ? Java Basics - Anfänger-Themen 6
T for-Schleife durch sleep verzögern? Java Basics - Anfänger-Themen 1
M Thread.sleep(20) dauert 31ms ? Java Basics - Anfänger-Themen 7
E Anfänger Problem mit Thread.sleep() Java Basics - Anfänger-Themen 11
S Thread.sleep Java Basics - Anfänger-Themen 6
D extreme CPU Auslastung bei Sleep, etc. Java Basics - Anfänger-Themen 5
S Frage zu sleep() Java Basics - Anfänger-Themen 3
V Alternative zu Thread.sleep() ? Java Basics - Anfänger-Themen 6
F Sleep, pause, delay Java Basics - Anfänger-Themen 2
S Runtime.exec -> Thread.sleep -> Konflikt Java Basics - Anfänger-Themen 7
S sleep ohne runnable? Java Basics - Anfänger-Themen 8
A Thread.sleep Java Basics - Anfänger-Themen 9
W sleep "hängt" bei vielen Threads Java Basics - Anfänger-Themen 2
M sleep...?? Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben