Nanosekunden-Pause innerhalb einen Thread-Loops

mariane

Mitglied
Hallo,

ich suche eine Möglichkeit innerhalb einer While-Schleife, die Bestandteil eines Threads ist, ohne größere CPU-Last eine Pause im Nanosekundenbereich einzubauen. Angedacht sind mittels einem weiteren while-loop und System.nanoTime() experimentell ermittelte 20000ns.

Benutze ich nun stattdessen Thread.sleep(0,20000) gehts in die Hose, sleep() löst leider nicht besser als 1ms auf, entspricht also Thread.sleep(1), kürzer ist nicht möglich, außer natürlich sleep(0).
Die sleep-Variante hat eh weitere Nachteile, so das nicht zugesichertes Warte-Interval und dass die Ausführungszeit der Instruktionen innerhalb des Loops im Thread nicht eingehen können.

Gibt es noch andere Möglichkeiten?

Die Variante A funktioniert, erzeugt aber CPU-Last vom Feinsten.
Variante B funktioniert nicht, was das gewünschte Zeitinvervall angeht.

Beste Grüße, mariane
Java:
// A
@Override
public void run()
{
    long pause = 20000;
    long start;
   
    ...
   
    while(true)
    {
        start = System.nanoTime();
       
        ...
       
        if(Thread.interrupted())
        {
            break;
        }
        while(start + pause > System.nanoTime())
        {
        }
    }
}
Java:
// B
@Override
public void run()
{
    int pause = 20000;
   
    ...
   
    while(true)
    {
        ...
       
        try
        {
            Thread.sleep(0, pause);
        }
        catch( InterruptedException e )
        {
            break;
        }
    }
}
 

Meniskusschaden

Top Contributor
Ich glaube nicht, dass das funktioniert. Entweder das Programm prüft wie in Variante A selbst, ob es soweit ist. Dann benötigt es dafür auch Rechenzeit.
Oder der Prozess, in dem das Programm läuft, legt sich kurz schlafen. Dann verbraucht er keine Rechenzeit, muß aber wieder aktiviert werden. Dafür wird wohl ein Scheduler des Betriebssystems zuständig sein. Für den wären sehr kurze Umschaltzeiten aber vermutlich nicht sinnvoll, weil zuviel Overhead für häufige Prozesswechsel anfallen würde.
Die Erklärung ist ein wenig spekulativ, aber ich kann es mir im Moment nur so vorstellen.
 

Thallius

Top Contributor
Also ich glaube nicht, dass du nano sekunden genau mit Java programmieren kannst. Überhaupt wird das auf einem Multitasking OS schwer werden. Solche genauigkeiten erhälst du nur wenn du mit Hardware Interrupts (z.B. vomTimer Chip) arbeitest und das geht nicht in Java
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Java Script Pause berechnen Allgemeine Java-Themen 5
T [TimerTask] Pause Allgemeine Java-Themen 5
S Batchdatei mit pause hängt Allgemeine Java-Themen 8
P JMF - Video Pause und Einzelbildweiterschaltung Allgemeine Java-Themen 2
L eine Pause in ein Programm einbauen? Allgemeine Java-Themen 10
J JavaScript innerhalb eines Java Projekts ausführen Allgemeine Java-Themen 2
Zrebna Möglichkeit regelmäßige indentation mittels/innerhalb Stringbuilder Allgemeine Java-Themen 14
E Elemente innerhalb einer ArrayList vergleichen Allgemeine Java-Themen 33
ReinerCoder auf Klassen innerhalb eines package zugreifen Allgemeine Java-Themen 22
S Zugriff auf jUnit Test Suite Runner-Instanzen innerhalb von Test Classes Allgemeine Java-Themen 7
S Code 'innerhalb' des synchronen Bereichs einer BlockingQueue ausfuehren..? Allgemeine Java-Themen 7
L Bilder innerhalb der JAR Datei Allgemeine Java-Themen 2
B Datei innerhalb des JARs von einer statischen Methode aufrufen Allgemeine Java-Themen 4
T Nur innerhalb des regex-Match ersetzen Allgemeine Java-Themen 9
A Navigation zu Files innerhalb jar Allgemeine Java-Themen 3
C Prüfen ob sich ein Punkt innerhalb einer Kugel befindet (Java3D,nicht-lineare GLS) Allgemeine Java-Themen 5
X Klassen innerhalb einer jar ersetzen Allgemeine Java-Themen 2
P Threads Thread innerhalb einer Klasse - ohne Extra Klasse Allgemeine Java-Themen 9
C 1500 Minuten innerhalb von 24h ?!?! Allgemeine Java-Themen 4
S groesstes Rechteck innerhalb eines Polygons/Shape finden..? Allgemeine Java-Themen 5
X Codeabarbeitung innerhalb des Hauptprogramms für bestimmte Zeit unterbrechen Allgemeine Java-Themen 2
M verschiedene Methonden innerhalb des gleichen Threads Allgemeine Java-Themen 7
J InvocationException im Thread (innerhalb von call() einer Callable Klasse) Allgemeine Java-Themen 2
J Directory/File Listing innerhalb JAR Allgemeine Java-Themen 2
P Serialisiertes Objekt innerhalb einer XML Node Allgemeine Java-Themen 25
M Innerhalb einer Jar in eine Txt schreiben Allgemeine Java-Themen 2
D Exe innerhalb einer Jar starten Allgemeine Java-Themen 10
U alle Dateien eines Ordners innerhalb einer JAR auflisten Allgemeine Java-Themen 6
N .jar innerhalb einer javaDatei starten Allgemeine Java-Themen 3
Luma Arbeitsverzeichnis innerhalb externen Bibliothek ändern Allgemeine Java-Themen 2
K MANIFEST.MF innerhalb einer JAR Datei lesen. Allgemeine Java-Themen 4
A Reflection - Variablen innerhalb einer Methode ermitteln Allgemeine Java-Themen 9
N Auf Bilder / Dateien innerhalb eines jar-Archives zugreifen Allgemeine Java-Themen 2
H Ein zufälliges Datum innerhalb eines Intervalles erzeugen Allgemeine Java-Themen 3
D Zahlen innerhalb eines Strings auslesen Allgemeine Java-Themen 3
D Suchfunktion innerhalb Jeditorpane Allgemeine Java-Themen 6
B java-version bestimmen innerhalb von Programm Allgemeine Java-Themen 4
A Verzeichnis auflisten - auch innerhalb eines Jars Allgemeine Java-Themen 6
M Datei innerhalb eines Zips ausführen? Allgemeine Java-Themen 4
P Perl innerhalb von Java ausführen Allgemeine Java-Themen 2
E Schaffe es einfach nicht daten innerhalb von 2 klassen zu üb Allgemeine Java-Themen 4
S konstruktor nur innerhalb der klasse aufrufbar Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben