Thread.sleep în Kotlin

Oprește programul (firul curent) pentru un număr dat de milisecunde, apoi continuă.

Sintaxă
Thread.sleep(millis: Long)

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ște delay().

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.