Thread.sleep e TimeUnit.SECONDS.sleep


91

Se avrò una chiamata per far dormire un thread Java, c'è un motivo per preferire una di queste forme rispetto all'altra?

Thread.sleep(x)

o

TimeUnit.SECONDS.sleep(y)

1
Un'altra opzione èThread.sleep(Duration.ofSeconds(s).toMillis())
cambunctious

Risposte:


126

TimeUnit.SECONDS.sleep(x)chiamerà Thread.sleep. L'unica differenza è la leggibilità e l'utilizzo TimeUnitè probabilmente più facile da capire per durate non ovvie (ad esempio: Thread.sleep(180000)vs.TimeUnit.MINUTES.sleep(3) ).

Per riferimento, vedere di seguito il codice di sleep()in TimeUnit:

public void sleep(long timeout) throws InterruptedException {
    if (timeout > 0) {
        long ms = toMillis(timeout);
        int ns = excessNanos(timeout, ms);
        Thread.sleep(ms, ns);
    }
}

FYI: progetto di selenio ha un metodo Sleeper che non richiede la cattura un'eccezione quando lo si utilizza: selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/...
djangofan

1
Sono d'accordo. Se vuoi dichiarare il tuo tempo di sonno una costante che puoi modificare in seguito, ad esempio da 1 minuto a 10 secondi, una soluzione è public static final long SLEEPING_TIME = TimeUnit.MINUTES.toMillis(1);. Ciò consente Thread.sleep()ma mantiene il vantaggio di leggibilità di TimeUnit.
Ole VV

8

Loro sono la stessa cosa. Io preferisco il secondo perché è più descrittivo e permette di scegliere l'unità di tempo (vedi TimeUnit): DAYS, HOURS, MICROSECONDS, MILLISECONDS, MINUTES, NANOSECONDS, SECONDS.


5
polemico: preferisco il primo - voglio che il thread dorma, non SECONDSo MILLISECONDS[:-)
user85421

3
@CarlosHeuberger: beh, puoi leggerlo come dormire per xSECONDS , ma sicuramente è una questione di gusti. D'altra parte, nota che sleep()è il staticmetodo Thread- quindi si potrebbe sostenere che non è chiaro quale thread si supponga di dormire (cosa Thread myThread = ...; myThread.sleep()significa?)
Tomasz Nurkiewicz

6
@CarlosHeuberger Sarebbe molto meglio essere in grado di scrivereThread.sleep(3, TimeUnit.SECONDS)
assylias

Aggiornato per rimuovere ogni confusione sull'equivalenza a causa delle unità scelte
Rachel

@assylias sono d'accordo, ma purtroppo non sono in grado di cambiarlo [Sorry
user85421
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.