Thread.sleep 대 TimeUnit.SECONDS.sleep


91

Java 스레드를 절전 모드로 전환하도록 호출하려는 경우 이러한 형식 중 하나를 다른 형식보다 선호하는 이유가 있습니까?

Thread.sleep(x)

또는

TimeUnit.SECONDS.sleep(y)

1
또 다른 옵션은Thread.sleep(Duration.ofSeconds(s).toMillis())
cambunctious

답변:


126

TimeUnit.SECONDS.sleep(x)를 호출 Thread.sleep합니다. 유일한 차이점은 가독성이며 사용하는 TimeUnit것이 명확하지 않은 기간 (예 : Thread.sleep(180000)vs. TimeUnit.MINUTES.sleep(3)) 동안 이해하기 더 쉬울 것입니다 .

참고로 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);
    }
}

참고 : Selenium 프로젝트에는 사용할 때 예외를 포착 할 필요가없는 Sleeper 메소드가 있습니다. selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/…
djangofan

1
나는 동의한다. 수면 시간을 나중에 변경할 수있는 상수 (예 : 1 분에서 10 초까지)로 선언하려는 경우 한 가지 해결책은 public static final long SLEEPING_TIME = TimeUnit.MINUTES.toMillis(1);. 이는 Thread.sleep()의 가독성 이점을 허용 하지만 유지합니다 TimeUnit.
Ole VV

8

그들은 동일합니다. 더 설명하고 시간 단위 (참조를 선택할 수 있기 때문에 나는 후자를 선호 TimeUnit) : DAYS, HOURS, MICROSECONDS, MILLISECONDS, MINUTES, NANOSECONDS, SECONDS.


5
논란의 여지가 : 내가 처음 선호 - 나는 잠 스레드를 원하는 아닌 SECONDS또는 MILLISECONDS[:-)
user85421

3
@CarlosHeuberger : 글쎄, 당신은 xSECONDS대한 수면으로 읽을 수 있지만 확실히 그것은 취향의 문제입니다. 반면, 메모 sleep()입니다 static에 대한 방법 Thread- 하나는 잠을 가정하는 스레드 명확하지 않다 주장 할 수 있도록 (무엇을합니까 Thread myThread = ...; myThread.sleep()의미?)
토마스 Nurkiewicz

6
@CarlosHeuberger겠습니까은 할 수 쓰기로 훨씬 더 나은Thread.sleep(3, TimeUnit.SECONDS)
assylias

때문에 선택 단위의 동등성에 대한 혼란을 제거하기 위해 업데이트
레이첼

@assylias 동의하지만 불행히도 변경할 수 없습니다 [:-|
user85421
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.