Thread weniger als 1 Millisekunde Schlafen legen

Status
Nicht offen für weitere Antworten.

outbreaker

Bekanntes Mitglied
Hallo

Ich schreibe ein Netzwerktool was in bestimmten Zeitabständen Datenpakete abschicken soll. Nun habe ich das Problem das ich mit Thread.sleep() meinen Thread mindestens eine Millisekunde schlafen lassen muss. Daduch kann ich maximal 6Mbit Datenrate bei UDP erreichen wenn ich den Sleep weglasse komme ich auf min 70 Mbit.
Nun ist meine Frage ob es eine Möglichkeit gibt den Thread weniger als eine Milliskeunde Schlafen zu lassen?
also so im Mikrosekundenbereich?
Hat jemand eine idee? oder schon mal was eigene geschrieben was das kann?

danke
 

Wildcard

Top Contributor
outbreaker hat gesagt.:
Nun ist meine Frage ob es eine Möglichkeit gibt den Thread weniger als eine Milliskeunde Schlafen zu lassen?
also so im Mikrosekundenbereich?
Nein, und es gibt auch keine Möglichkeit einen Thread eine Millisekunde schlafen zu lassen.
Es gibt zwar diese Methode:
http://java.sun.com/javase/6/docs/api/java/lang/Thread.html#sleep(long, int)
aber das ist von der Auflösung des Betriebssystems abhängig, unter einer Millisekunde wirst du nicht schaffen.
Altenativ ist noch Thread.yield() zu nennen.
 

The_S

Top Contributor
Ne, geht nicht. Generell solltest du darauf verzichten einen Thread weniger als 20 Millisekunden schlafen zu legen, ansonsten kann es zu Problemen kommen!
 

byte

Top Contributor
Mit Java SE 5+ geht (theoretisch) folgendes:

Code:
TimeUnit.NANOSECONDS.sleep(...);
 

outbreaker

Bekanntes Mitglied
Das funktioniert leider nicht:

byto hat gesagt.:
Mit Java SE 5+ geht (theoretisch) folgendes:

Code:
TimeUnit.NANOSECONDS.sleep(...);

Es gibt zwar keinen Fehler aber einen sleep macht er auch nicht. Es gibt keinen Unterschied ob ich das implementiere oder die Zeile weglasse

hab es zum Testen mal mit

Code:
TimeUnit.MICROSECONDS.sleep(1000)

gemacht
dann hat er wieder eine Milliskeunde pausiert wie bei Thread.sleep()
wenn ich weniger als 1000 genommen habe dann sleep er auch 1ms und nicht weniger

alles nen bissle komisch


gibt es vielleicht andere JNI - Klassen die man nutzen könnte?
 

KSG9|sebastian

Top Contributor
So wie ich das sehe kannst du da zwar Microseconds angeben, jedoch ist der kleinste Wert 1MS (was ich auf die schnelle im JAD gesehen hab werden die Microsecs in Millis umgewandelt...
 

outbreaker

Bekanntes Mitglied
ich habe mir mal in openjava die Sleepmethode angesehen und die sieht so aus:
Code:
public static void sleep(long millis, int nanos) throws InterruptedException {
	if (millis < 0) {
            throw new IllegalArgumentException("timeout value is negative");
	}

	if (nanos < 0 || nanos > 999999) {
            throw new IllegalArgumentException(
				"nanosecond timeout value out of range");
	}

	if (nanos >= 500000 || (nanos != 0 && millis == 0)) {
	    millis++;
	}

	sleep(millis);
}

da wird auch alles in millis umgerechnet

und die sleep(millis); is dann ne native methode

Code:
public static native void sleep(long millis) throws InterruptedException;

wenn ich den code finden würde könnte ich mir vielleicht ne eigne etwas abgewandelte sleep methode schreiben
 

hupfdule

Top Contributor
outbreaker hat gesagt.:
wenn ich den code finden würde könnte ich mir vielleicht ne eigne etwas abgewandelte sleep methode schreiben
Eher nicht. Denn du musst ja im Endeffekt das Betriebssystem veranlassen zu warten. Und Betriebssysteme sind i.d.R. nicht genauer als 10ms.
Du wirst es also auch nicht umschreiben können.
 

hupfdule

Top Contributor
outbreaker hat gesagt.:
es muss doch möglich seine eine Methode alle 0,5ms auszuführen und nicht nur alle 1ms
Dein Programm ist nicht das einzige im System. Das Betriebssystem teil allen Prozessen eine gewisse Rechenzeit zu. Und es ist dem Betriebssystem einfach nicht möglich, dir so hoch aufgelöst die Rechenzeit zuzuweisen. Das ist in anderen Sprachen auch nicht so.

Könnte maximal bei einem Echtzeitbetriebssystem funktionieren, wobei ich auch nicht glaube, dass die auf 0,5ms genau sind.
 

outbreaker

Bekanntes Mitglied
is ja richtig das er nicht nur eine ms schläft is schon klar aber er kommt relaiv gleichmäßig dran und kann arbeiten

das is ja das was ich erreichen will

und das mein Programm nich das einzige ist ist auch richtig aber ich versuche nichts weiter auf dem Testrechner laufen zu lassen außer ein ganz einfaches Linux welches dieses Programm ausführen soll
 

hupfdule

Top Contributor
outbreaker hat gesagt.:
is ja richtig das er nicht nur eine ms schläft is schon klar aber er kommt relaiv gleichmäßig dran und kann arbeiten

das is ja das was ich erreichen will
Wenn es dir nur um Gleichmäßigkeit geht, warum reichen dir dann nicht 10 oder 20ms?

und das mein Programm nich das einzige ist ist auch richtig aber ich versuche nichts weiter auf dem Testrechner laufen zu lassen außer ein ganz einfaches Linux welches dieses Programm ausführen soll
Dann gib dort mal
Code:
ps aux
ein. Dann siehst du, was da noch so alles läuft. ;-)
 

Wildcard

Top Contributor
outbreaker hat gesagt.:
is ja richtig das er nicht nur eine ms schläft is schon klar aber er kommt relaiv gleichmäßig dran und kann arbeiten

das is ja das was ich erreichen will
Dann nimm wie oben erwähnt yield. Dann kommt dein Programm nicht in immer gleichen Abständen dran, aber es kann arbeiten und braucht nicht die ganze CPU.
 

outbreaker

Bekanntes Mitglied
ich weiß das da noch Prozesse laufen aber das sind sehr wenige und die brauchen nur sehr wenig Rechenzeit

Die meiste steht für mein Programm zur Verfügung
 

madboy

Top Contributor
hupfdule hat gesagt.:
Und es ist dem Betriebssystem einfach nicht möglich, dir so hoch aufgelöst die Rechenzeit zuzuweisen. Das ist in anderen Sprachen auch nicht so.
outbreaker hat gesagt.:
ein ganz einfaches Linux welches dieses Programm ausführen soll
Unter Linux (seit Kernel 2.6.x, weiß ich jetzt grad nicht genau ab wann) läuft der System-Timer mit 1000 HZ => macht 1 ms.

Wenn du dir nen neuen Kernel bauen willst, kannst das allerdings hier einstellen:
linux-source-2.6.20/include/asm-*/param.h:# define HZ
* = verwendete Architektur
Ob das allerdings dann auch irgendwie durch die Java VM durchgereicht werden kann weiß ich nicht.

Die Alternative wäre natürlich (wie schon von byto und hupfdule gepostet) ein RT-Linux. Ob mit Java Realzeit möglich ist wage ich allerdings zu bezweifeln.

Das einfachste wäre natürlich immer noch die von Wildcard empfohlene Methode oder active waiting wie ich in Thread http://www.java-forum.org/de/viewtopic.php?t=49630 geschrieben habe. Wenn sowieso nur deine Anwendung auf dem Rechner läuft sollte es ja egal sein wenn der Prozessor zu 100% ausgelastet ist.
Auch wenn mehrere Threads parallel zählen sollte das funktionieren, so lange die Threads relativ lange leben (zumindest in der Theorie :wink: ), da ja ständig nachgeregelt wird.

Gruß,
madboy
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
P thread nimmt veränderte boolean nicht AWT, Swing, JavaFX & SWT 7
N JFrame loescht alles, sobald der Thread zuende ist AWT, Swing, JavaFX & SWT 22
M Server/Client thread von GUI Trennen AWT, Swing, JavaFX & SWT 2
K JavaFx, Sound Aufnahme und Thread AWT, Swing, JavaFX & SWT 0
T Exception in thread "main" java.lang.NoClassDefFoundError AWT, Swing, JavaFX & SWT 4
G Exception javafx Thread -> caused by removing children while in EventHandler AWT, Swing, JavaFX & SWT 28
H Event Handling Thread - Abruf der get-Methode AWT, Swing, JavaFX & SWT 5
J "Exception in thread "AWT-EventQueue-0"" Fehler AWT, Swing, JavaFX & SWT 3
G Thread starten Swing AWT, Swing, JavaFX & SWT 5
C Thread verwalten AWT, Swing, JavaFX & SWT 2
A Swing Exception in thread "AWT-EventQueue-0" AWT, Swing, JavaFX & SWT 1
S JavaFX Exception in thread "JavaFX Application Thread" AWT, Swing, JavaFX & SWT 3
L Label im JavaFX Thread Updaten AWT, Swing, JavaFX & SWT 3
ralfb1105 JavaFX Alert Confirmation Dialog aus einem Service Thread AWT, Swing, JavaFX & SWT 8
ralfb1105 JavaFX MVC: Thread in Model Class mit Ausgabe in TextArea AWT, Swing, JavaFX & SWT 10
D Swing SwingUtils / Thread Problem AWT, Swing, JavaFX & SWT 3
J Thread per Button starten AWT, Swing, JavaFX & SWT 10
J Thread kennt JButton nicht. AWT, Swing, JavaFX & SWT 11
T JavaFX Task / Thread / FXThread Komplikationen AWT, Swing, JavaFX & SWT 5
O Swing Event Dispatch Thread AWT, Swing, JavaFX & SWT 1
L JavaFX UI Thread block AWT, Swing, JavaFX & SWT 13
X Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: -1 AWT, Swing, JavaFX & SWT 6
sandaime Swing Thread für CMD auslesen AWT, Swing, JavaFX & SWT 16
E JavaFX JavaFX Application in Thread ausführen AWT, Swing, JavaFX & SWT 1
D JavaFX UI-Thread und DB-Thread trennen um z.B. Ladebalken anzuzeigen AWT, Swing, JavaFX & SWT 15
T JavaFX Controller im extra Thread AWT, Swing, JavaFX & SWT 0
T Swing 2 Thread.sleep parallel laufen lassen AWT, Swing, JavaFX & SWT 4
L Zweites Fenster mit Thread AWT, Swing, JavaFX & SWT 0
E JavaFX Stage.show() in ursprünglichem Thread starten AWT, Swing, JavaFX & SWT 7
L Swing Frame in Thread wird nicht gezeichnet AWT, Swing, JavaFX & SWT 2
N Programm mit Swing und Thread, Figur bewegen sich nicht AWT, Swing, JavaFX & SWT 6
C Im ActionListener Buttons disablen, einen Thread starten, dann Buttons enablen AWT, Swing, JavaFX & SWT 2
C Thread-/ Simulations- Problem AWT, Swing, JavaFX & SWT 18
T Swing Button bleibt grau [=> UI hat sich aufgehängt, Aufgabe in Thread auslagern] AWT, Swing, JavaFX & SWT 3
M Thread-Frage in SWT AWT, Swing, JavaFX & SWT 1
Q GUI außerhalb GUI-Thread updaten - GUI friert ein AWT, Swing, JavaFX & SWT 18
C Thread in Klassen starten AWT, Swing, JavaFX & SWT 4
L exception in thread awt-eventqueue-0 java.lang.nullpointerexception AWT, Swing, JavaFX & SWT 2
S Swing Exception in thread "AWT-EventQueue-0" bei Jlabel AWT, Swing, JavaFX & SWT 4
D SWT SWT Elemente aus anderen Klassen aufrufen - Invalid thread access AWT, Swing, JavaFX & SWT 6
K JavaFX Tableview mit fxml ohne Aktualiserung trotz Thread AWT, Swing, JavaFX & SWT 13
K Event Handling 2 Buttons und Thread stop AWT, Swing, JavaFX & SWT 3
C Swing Update von swing-TableModels per Thread. Eins geht, das andere nicht, warum? AWT, Swing, JavaFX & SWT 12
V JLabel bzw. GUI aus externen Thread ansteuern AWT, Swing, JavaFX & SWT 3
J Applet Paralleles Thread Handling AWT, Swing, JavaFX & SWT 3
H Swing JfreeChart aktualisieren - mit daten aus thread AWT, Swing, JavaFX & SWT 3
T Java Swing Main GUI Thread AWT, Swing, JavaFX & SWT 3
C Event Handling Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException AWT, Swing, JavaFX & SWT 43
T Table-Zeilen mit Thread einfärben AWT, Swing, JavaFX & SWT 15
F Swing GUI-Thread für automatisches Update nutzen AWT, Swing, JavaFX & SWT 10
Y KeyListener, GUI Thread, repaint AWT, Swing, JavaFX & SWT 7
V Nullpointerexception (etwas mit thread und jframe) AWT, Swing, JavaFX & SWT 3
P Problem Thread.sleep() und JProgressBar AWT, Swing, JavaFX & SWT 7
S SWT GUI-Thread AWT, Swing, JavaFX & SWT 11
A Thread und sleep(1000); AWT, Swing, JavaFX & SWT 7
B Swing Thread+Animation AWT, Swing, JavaFX & SWT 7
S Timer oder Thread.sleep AWT, Swing, JavaFX & SWT 3
M Exception in thread "Thread-3" java.lang.NullPointerException AWT, Swing, JavaFX & SWT 18
B Über SWT Button Thread beenden AWT, Swing, JavaFX & SWT 2
C SWT Gui Thread hängt sich auf AWT, Swing, JavaFX & SWT 3
lumo SWT Exception in thread "main" org.eclipse.swt.SWTError: No more handles AWT, Swing, JavaFX & SWT 3
Luk10 Swing Problem mit Zeichen-Thread AWT, Swing, JavaFX & SWT 8
G 2D-Grafik Von Thread aus Zeichnen AWT, Swing, JavaFX & SWT 5
U Swing JLabel bewegen mittels Thread AWT, Swing, JavaFX & SWT 3
M JProgressBar für einen Thread AWT, Swing, JavaFX & SWT 14
R JTable und Thread AWT, Swing, JavaFX & SWT 4
K Thread.sleep in GUI AWT, Swing, JavaFX & SWT 4
J Thread funktioniert nicht AWT, Swing, JavaFX & SWT 10
D JPanel mit Thread in JPanel AWT, Swing, JavaFX & SWT 4
F Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: null AWT, Swing, JavaFX & SWT 5
P Teil einer Swing GUI in eigenem Thread AWT, Swing, JavaFX & SWT 4
S Thread.sleep() in einer methode fürs zeichen AWT, Swing, JavaFX & SWT 3
O JTree/TreeModel/DefaultMutableTreeNodes thread safe machen AWT, Swing, JavaFX & SWT 3
P repaint während Thread läuft AWT, Swing, JavaFX & SWT 9
F SWT table refresh per Thread AWT, Swing, JavaFX & SWT 2
V Swing remove(Component) blockiert Thread sehr lange. AWT, Swing, JavaFX & SWT 6
J AWT Artefakte bei AWT-Rendering durch parallelen Thread AWT, Swing, JavaFX & SWT 4
H Thread-Problem mit der Darstellung beim Sperren des Fensters AWT, Swing, JavaFX & SWT 2
T Event Dispatch Thread und noch ein Thread AWT, Swing, JavaFX & SWT 7
Burny91 Swing Thread mit wait() und notify() steuern AWT, Swing, JavaFX & SWT 22
N SWT - über Thread Composite erstellen und Anhängen AWT, Swing, JavaFX & SWT 6
K Vom Gui aus auf einen Thread warten AWT, Swing, JavaFX & SWT 4
X Problem bei JTextArea und Thread.sleep() AWT, Swing, JavaFX & SWT 8
F Merkwürdiges Verhalten zeichnen sperater Thread AWT, Swing, JavaFX & SWT 13
B Swing Swing und Thread.sleep() AWT, Swing, JavaFX & SWT 6
N Exception Behandlung mit setDefaultUncaughtExceptionHandler, insbesondere im EventDispatcher Thread AWT, Swing, JavaFX & SWT 4
Q Neuer Thread zum Öffnen AWT, Swing, JavaFX & SWT 2
P Swing GUI im Thread? AWT, Swing, JavaFX & SWT 5
T GUI JFrame - neuer Thread AWT, Swing, JavaFX & SWT 2
data89 Was mache ich mit "Dispatched Event Thread"/Substance falsch? AWT, Swing, JavaFX & SWT 4
0x7F800000 Allg. Frage zum ev. dispatch thread, wie korrekt auf reaktion der Listener warten? AWT, Swing, JavaFX & SWT 4
S Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException AWT, Swing, JavaFX & SWT 7
T thread.sleep Sprung Problem AWT, Swing, JavaFX & SWT 24
N Server mit Thread und Statusbox AWT, Swing, JavaFX & SWT 3
S Objektverhalten in einen Thread legen AWT, Swing, JavaFX & SWT 4
G JProgressBar actionPerformedMethode und SwingUI thread AWT, Swing, JavaFX & SWT 36
E Komponenten in Event Dispatch Thread erzeugen? AWT, Swing, JavaFX & SWT 4
J Thread in GUI einbauen AWT, Swing, JavaFX & SWT 2
Lony AbstractTableModel Exception in thread "AWT-EventQueue- AWT, Swing, JavaFX & SWT 3
A Ticker als Thread AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen


Oben