Wie pause ein thread in java?
Betrachten Sie den folgenden code:
while(true) {
someFunction();
Thread.sleep(1000);
}
Was ich will, ist, dass, someFunction() aufgerufen werden, einmal alle 10 Sekunden. Aber dies ist nicht der Fall. Es wird aufgerufen, jede Sekunde. Ich versuchte Thread.wait(1000), aber auch das nicht helfen. Ich entfernte die zwar Teil, hielt nur den Körper, und am Ende schrieb :
Thread.start();
Aber es throwed eine Ausnahme. Gibt es irgendeine andere Lösung?
- Wie viele Millisekunden denken Sie, sind in einer Sekunde? (Hinweis: Es ist nicht 100)
- lol. Mein schlechtes. Nicht erkennen, ich war putting 1000 und nicht 10000!! 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Er rief jeden zweiten, weil Sie schlafen für 1000 Millisekunden, auch bekannt als 1 Sekunde.
Ändern
Thread.sleep(10000)
- und das wird besser sein für Sie.Nutzen Sie alternativ
was bedeutet, dass Sie nicht zu tun haben, die Arithmetik selbst. (Viele APIs nun nehmen Sie eine Menge und eine
TimeUnit
, aber es scheint nicht zu sein, so etwas wieThread.sleep
leider.)Beachten Sie, dass dies der thread reagiert nicht mehr für 10 Sekunden, mit no-clean so zu sagen, es zu wecken (z.B. weil Sie wollen, es herunterzufahren). Ich in der Regel lieber verwenden
wait()
so, dass ich Impuls den gleichen monitor aus einem anderen thread zu zeigen "ich will, dass du jetzt aufwachen!" Dies ist in der Regel von innerhalb einer while-Schleife der formEDIT: tvanfosson die Lösung mit einem
Timer
ist auch gut - und eine weitere alternative ist die VerwendungScheduledExecutorService
was kann ein bisschen flexibler (und einfacher zu testen).Thread.sleep()
nimmt die Anzahl der Millisekunden, um zu schlafen. Also, AufrufThread.sleep(1000)
schläft 1000 Millisekunden, 1 Sekunde. Machen, dassThread.sleep(10000)
und es wird Platz für 10 Sekunden.1 Sekunde sind 1000 Millisekunden, also, wenn Sie wollen 10 Sekunden = 10 * 1000 = 10000 Millisekunden
z.B.
Was Sie wahrscheinlich tun möchten, verwenden Sie eine
Timer
und einrichten einer zeitgesteuerten Aufruf der Funktion eher als schlafen. Wenn Sie brauchen mehr Genauigkeit in Bezug auf das Intervall, Sie können nachverfolgen, wie lange es seit dem letzten Lauf und passen Sie den neuen timer zu halten Sie Ihre Intervall von Driften. Finden Sie ein Beispiel für einen einfachen timer in diesem tutorial.Ich werde nicht ins detail gehen, das Thema in Hinblick auf die Präzision des Arguments, da @Jon hat schon abgedeckt-Sie brauchen Millisekunden statt Sekunden.
Betrachten 1000 Millisekunden, 1 Sekunde. Dafür solltest du Thread.sleep(10000) für acheiving pause dein thread in 10 Sekunden. Sie können auch mit Schleifen mit, wie viele Sekunden gewartet werden soll, dein thread.
Ex. angenommen, Sie wollen, halten Sie Ihren thread in einer halben Stunde( 30 Minuten). Verwenden Sie dann,
Pausiert der thread in 30 Minuten.
Dann warum nennen Sie
Thread.sleep()
mit 1000 als parameter? Das ist in Millisekunden, so sind Sie ausdrücklich zu sagen "1 Sekunde warten".