Thread.sleepとTimeUnit.SECONDS.sleep


91

Javaスレッドをスリープ状態にするための呼び出しを行う場合、これらの形式の1つを他の形式よりも優先する理由はありますか?

Thread.sleep(x)

または

TimeUnit.SECONDS.sleep(y)

1
もう1つのオプションはThread.sleep(Duration.ofSeconds(s).toMillis())
1

回答:


126

TimeUnit.SECONDS.sleep(x)を呼び出しますThread.sleep。唯一の違いは読みやすさであり、使用TimeUnitすることは、明白でない期間(例:Thread.sleep(180000)vs TimeUnit.MINUTES.sleep(3)。)ではおそらく理解しやすいでしょう。

参考のために、コードの下に参照sleep()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:セレンプロジェクトは、それを使用するときに例外をキャッチする必要はありませんスリーパー方法があります。 selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/...
djangofan

1
同意する。睡眠時間を後で変更できる定数、たとえば1分から10秒に宣言する場合、1つの解決策はpublic static final long SLEEPING_TIME = TimeUnit.MINUTES.toMillis(1);です。これによりThread.sleep()、の読みやすさの利点が可能になりますが、維持されTimeUnitます。
Ole VV

8

それらは同じです。それは、より説明的で、時間単位を選択することができますので、私は(参照、後者を好みますTimeUnit): 、DAYSHOURSMICROSECONDSMILLISECONDSMINUTES、。NANOSECONDSSECONDS


5
議論の余地がある:私は最初のものを好む-SECONDSまたはMILLISECONDS[:-)ではなくスレッドをスリープさせたい
user85421 2012年

3
@CarlosHeuberger:ええと、xの睡眠SECONDSとして読むことができますが、確かにそれは好みの問題です。一方、それsleep()staticメソッドオンであることに注意してくださいThread-したがって、どのスレッドがスリープすることになっているのかが明確ではないと主張する人もいるかもしれません(どういうThread myThread = ...; myThread.sleep()意味ですか?)
Tomasz Nurkiewicz 2012年

6
@CarlosHeuberger書くことができる方がはるかに良いでしょうThread.sleep(3, TimeUnit.SECONDS)
assylias 2012年

選択された単位による同等性に関する混乱を取り除くために更新
レイチェル

@assylias同意しますが、残念ながら変更できません[:-|
user85421 2012年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.