Ce face Thread.sleep
Thread.sleep(1000) pune firul de execuție curent „la somn” pentru aproximativ 1000 de milisecunde (o secundă). Programul nu face nimic în acest timp, apoi continuă cu instrucțiunea următoare. Funcția vine din Java (java.lang.Thread) și nu trebuie importată.
Timpul real poate fi puțin mai lung decât cel cerut, niciodată mai scurt (în condiții normale). În corutine nu folosi Thread.sleep, care blochează firul; acolo există delay(). Pentru a măsura cât a durat ceva, vezi measureTimeMillis.
Parametri
| Parametru | Descriere |
|---|---|
millis |
Durata pauzei, în milisecunde. |
Ce returnează
Nimic.
Exemple
Exemplul 1: Numărătoare inversă
Între numere se face o pauză scurtă. Rezultatul afișat este același; doar ritmul afișării depinde de pauze.
fun main() {
for (i in 3 downTo 1) {
println("$i...")
Thread.sleep(200)
}
println("Start!")
}
Rezultat
3...
2...
1...
Start!
Exemplul 2: Pauza durează cel puțin cât ai cerut
Timpul exact diferă de la o rulare la alta, așa că afișăm doar dacă a trecut minimul cerut.
fun main() {
val inceput = System.nanoTime()
Thread.sleep(300)
val ms = (System.nanoTime() - inceput) / 1_000_000
println("Au trecut cel puțin 300 ms: ${ms >= 300}")
}
Rezultat
Au trecut cel puțin 300 ms: true
Exemplul 3: Reîncercare cu pauză
O operație care eșuează de două ori este reîncercată, cu o pauză tot mai mare între încercări.
fun main() {
var incercari = 0
fun trimite(): Boolean {
incercari++
return incercari >= 3
}
var pauza = 100L
while (!trimite()) {
println("Încercarea $incercari a eșuat, aștept $pauza ms")
Thread.sleep(pauza)
pauza *= 2
}
println("Trimis la încercarea $incercari")
}
Rezultat
Încercarea 1 a eșuat, aștept 100 ms
Încercarea 2 a eșuat, aștept 200 ms
Trimis la încercarea 3
Greșeli frecvente
- Dai secunde în loc de milisecunde:
Thread.sleep(5)așteaptă 5 ms, nu 5 secunde. - Folosești
Thread.sleepîntr-o corutină sau pe firul interfeței grafice din Android, care se blochează. Foloseștedelay().
Comenzi înrudite
Duration.inWholeSeconds: Transformă o durată într-un număr Long de secunde sau milisecunde întregi (restul se taie).measureTimeMillis: Măsoară cât durează un bloc de cod: measureTimeMillis dă milisecunde (Long), measureTime dă un Duration.Int.seconds: Creează o durată (Duration) dintr-un număr: 90.seconds, 5.minutes, 250.milliseconds.