Thread.sleep ve TimeUnit.SECONDS.sleep karşılaştırması


91

Java Thread'ı uyutmak için bir telefon görüşmesi yapacaksam, bu formlardan birini diğerine tercih etmem için bir neden var mı?

Thread.sleep(x)

veya

TimeUnit.SECONDS.sleep(y)

1
Başka bir seçenek deThread.sleep(Duration.ofSeconds(s).toMillis())
cambunctious

Yanıtlar:


126

TimeUnit.SECONDS.sleep(x)arayacak Thread.sleep. Tek fark okunabilirliktir ve kullanım TimeUnit, belirgin olmayan süreler için anlaşılması muhtemelen daha kolaydır (örneğin: Thread.sleep(180000)vs. TimeUnit.MINUTES.sleep(3)).

Başvuru için, kodu aşağıya bakınız sleep()de TimeUnit:

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

Bilginize: Selenium projesi, kullanırken bir istisna yakalama gerektirmeyen bir Uyuyan yöntemine sahiptir: selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/…
djangofan

1
Katılıyorum. Uyku sürenizi daha sonra değiştirebileceğiniz bir sabit ilan etmek istiyorsanız, örneğin 1 dakikadan 10 saniyeye, bir çözümdür public static final long SLEEPING_TIME = TimeUnit.MINUTES.toMillis(1);. Bu Thread.sleep(), okunabilirlik avantajına izin verir ancak bunu korur TimeUnit.
Ole VV

8

Onlar aynı. Daha açıklayıcı ve zaman birimi (bkz seçmenize olanak verir çünkü ikinci tercih TimeUnit): DAYS, HOURS, MICROSECONDS, MILLISECONDS, MINUTES, NANOSECONDS, SECONDS.


5
tartışmalı: SECONDSMILLISECONDS
İlkini

3
@CarlosHeuberger: x için uykuSECONDS olarak okuyabilirsiniz , ama kesinlikle bir zevk meselesi. Öte yandan, kayda göre sleep()ise staticüzerinde yöntem Thread- Bir uyku için varsayalım ki iplik belli değil iddia edebilir böylece (yapar Thread myThread = ...; myThread.sleep()ortalama?)
Tomasz Nurkiewicz

6
@CarlosHeuberger Yazabilmek çok daha iyi olurduThread.sleep(3, TimeUnit.SECONDS)
assylias

Seçilen birimler nedeniyle eşdeğerlikle ilgili herhangi bir karışıklığı gidermek için güncellendi
Rachel

@assylias Kabul ediyorum, ancak maalesef değiştiremiyorum [: - |
user85421
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.