Thread.sleep与TimeUnit.SECONDS.sleep

Rac*_*hel 79 java sleep

如果我打算让一个Java线程进入睡眠状态,是否有理由更喜欢这些形式之一?

Thread.sleep(x)
Run Code Online (Sandbox Code Playgroud)

要么

TimeUnit.SECONDS.sleep(y)
Run Code Online (Sandbox Code Playgroud)

ass*_*ias 111

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 我同意。如果您想将睡眠时间声明为可以稍后更改的常量,例如从 1 分钟到 10 秒,一种解决方案是`public static final long SLEEPING_TIME = TimeUnit.MINUTES.toMillis(1);`。这允许 `Thread.sleep()` 但保持了 `TimeUnit` 的可读性优势。 (2认同)

Tom*_*icz 8

他们是一样的.我更喜欢后者,因为它是更具描述性的,并允许选择时间单位(见TimeUnit): ,DAYS,HOURS,MICROSECONDS,MILLISECONDS,MINUTES,.NANOSECONDSSECONDS

  • @CarlosHeuberger能写"Thread.sleep(3,TimeUnit.SECONDS)"会好得多 (6认同)
  • 争论:我更喜欢第一个 - 我想让线程睡觉,而不是`SECONDS`或`MILLISECONDS` [:-) (5认同)
  • @CarlosHeuberger:好吧,你可以把它看作*睡觉的x`SECONDS`*,但肯定是一个品味问题.另一方面,请注意`sleep()`是`Thread`上的`static`方法 - 所以有人可能会说不清楚哪个线程要睡觉(什么是'Thread myThread = ...; myThread .sleep()的意思是?) (3认同)