Ich möchte eine while-Schleife mit Thread.sleep kombinieren, so dass der Code in jeder Nanosekunde oder Mikrosekunde in Java ausgeführt wird. Kann mir jemand helfen? Sorry für mein schlechtes Englisch, ich bin Holländer.Wie kombiniere ich Thread.sleep und While-Schleife in Java?
Antwort
Sie können nicht für eine Mikrosekunde schlafen und nur die Überprüfung der Zeit dauert viele Nano-Sekunden.
Wenn Sie auf eine Mikrosekunde warten möchten, müssen Sie warten. Hinweis: Dies wird bis zu 100% CPU verbrauchen.
while(running) {
long end = System.nanoTime() + micros * 1000;
while (end > Systen.nanoTime()) { }
// do something.
}
so wird der Code jedes ... Mikrosekunde in Java
Sie könnten berücksichtigen wollen, wie lange der Code für läuft
long delayNS = micros * 1000;
long next = System.nanoTime();
while(running) {
next += delayNS;
while (next > Systen.nanoTime()) { }
// do something.
}
Also, wenn die Der Code braucht einige Zeit, bis Sie einen konsistenten Abstand zwischen den Ereignissen erhalten.
Hinweis:
Es gibt Thread.sleep(long millis, int nanos)
aber es rundet nur die nanos
auf die nächsten Millis.
Es ist LockSupport.parkNanos(n)
die Unter Millis sein kann, aber ist typischerweise ein Minimum von etwa 25 Mikrosekunden (sogar für eine 1 ns Verzögerung)
Es ist Thread.yield()
, die 16 Mikrosekunden dauern können, aber es kann auch viel länger.
Was meinst du mit Laufen? Und ist es richtig, dass Mikro den Wert 1 hat? –
@ DaniëlvanderZwan Sie können ein Flag verwenden, um zu bestimmen, wie lange die Schleife ausgeführt werden soll. Wenn Sie ein Intervall von 1 Mikrosekunden benötigen, können Sie 'micros = 1' –
erwähnen, in der Antwort, dass dies Auswirkungen auf die CPU-Zyklen hat, da der Code ständig die ganze Zeit tut, er ist nicht im Leerlauf (es ist das Gegenstück zur Sicherstellung genau Timing zwischen den Executionen) –
Sie können dies in einem Thread-Objekt tun und in der run-Methode setzen Sie Ihre while mit try Catch-Verhalten.
@Override
public void run()
{
while (true) {
try
{
for (int cont = 0; cont < numberOfRequests; cont++)
{
new GetRequestMethod(url, httpClient, defaultRequestConfig, logOption).start();
}
LOG.log(Level.INFO, "\n---------------Send REQUEST " + numberOfRequests + "---------------\n");
}
catch (OutOfMemoryError m)
{
LOG.log(Level.SEVERE, "\n\n\n\n\n\n\n\n\n\nMemory Critical Error: " + m.getMessage() + "\n\n\n\n\n\n\n\n\n\n", m);
sleep(TIME_SLEEP_EXCEPTION);
renewManager();
}
catch (Throwable t)
{
LOG.log(Level.SEVERE, "\n\n\n\n\n\n\n\n\n\nCritical Error!\n", t);
sleep(TIME_SLEEP_EXCEPTION);
renewManager();
}
}
}
Schlaf-Methode:
private void sleep(int time)
{
try
{
Thread.sleep(time);
}
catch (InterruptedException e)
{
LOG.log(Level.SEVERE, "\n\n\n\n\n\n\n\n\n\nSleeping Critical Error: " + e.getMessage() + "\n\n\n\n\n\n\n\n\n\n", e);
}
- 1. Wie kombiniere ich zwei ResultSets in Java?
- 2. java - Thread.sleep
- 3. Wie kombiniere ich zwei Listen in Java
- 4. Thread.Sleep Alternative in Java
- 5. Wie kombiniere ich list object java?
- 6. Wie kombiniere ich und Bedingungen?
- 7. JAVA - Wie kombiniere ich zwei Listen?
- 8. Wie kombiniere ich und setze? in .bat
- 9. Java: Warum sind Thread.sleep() und yield() statisch?
- 10. Wie kombiniere ich Bibliotheken?
- 11. Wie kombiniere ich Arbitrary und IO Monaden?
- 12. Wie kombiniere ich `var` und` const`?
- 13. Guava: Wie kombiniere ich Filter und transformiere?
- 14. Wie kombiniere ich Swing und SpringFramework?
- 15. Wie kombiniere ich Find() und AsNoTracking()?
- 16. Wie kombiniere ich EF und ADO?
- 17. Wie kombiniere ich angularjs und xhtml?
- 18. Wie kombiniere ich aes() und aes_string() Optionen
- 19. Wie kombiniere ich opencv und gstreamer?
- 20. RxJava - Wie kombiniere ich Scan und FlatMap?
- 21. button.setText() und Thread.sleep()
- 22. Thread.sleep und neu streichen
- 23. Wie kombiniere ich mehrere Isotopenkombinationsfilter
- 24. Wie kombiniere ich Grid-Arrays?
- 25. Wie kombiniere/kombiniere ich Spalten aus zwei SQL-Abfrageergebnissen?
- 26. Wie kombiniere ich mehrere Modelle?
- 27. Wie kombiniere ich zwei Spaltenlisten?
- 28. Wie bekomme ich den Thread Thread.Sleep?
- 29. Wie kombiniere ich zwei Arrays?
- 30. Wie kombiniere ich zwei Dateien in Perl?
haben Sie alles versucht? Zeigen Sie uns einen Code, den Sie geschrieben haben, um dies zu versuchen. Dies ist kein kostenloser Codierservice – ja08prat
Was genau ist die Schwierigkeit, die Sie haben? Sie können tatsächlich 'Thread.sleep()' innerhalb einer 'while' Schleife aufrufen; Wenn Sie etwas versucht haben, das nicht funktioniert hat, dann präsentieren Sie den Code. Ansonsten versuchen Sie es sich selbst auszuarbeiten, bevor Sie hier eine Frage stellen. –
Ich habe folgendes versucht: 'while (etwas) {Thread.sleep (0,1000); // Ich habe etwas gemacht, natürlich mit Versuch und Fang}' aber das Programm friert jedes Mal ein, wenn ich das benutze und ich muss das Fenster schließen Taskmanager. –