Thread.sleep so với TimeUnit.SECONDS.sleep


91

Nếu tôi sẽ có một cuộc gọi yêu cầu Java Thread đi ngủ, có lý do gì để thích một trong những dạng này hơn dạng kia không?

Thread.sleep(x)

hoặc là

TimeUnit.SECONDS.sleep(y)

1
Một lựa chọn khác làThread.sleep(Duration.ofSeconds(s).toMillis())
phong phú

Câu trả lời:


126

TimeUnit.SECONDS.sleep(x)sẽ gọi Thread.sleep. Sự khác biệt duy nhất là tính dễ đọc và cách sử dụng TimeUnitcó lẽ dễ hiểu hơn đối với thời lượng không rõ ràng (ví dụ: Thread.sleep(180000)so với TimeUnit.MINUTES.sleep(3)).

Để tham khảo, hãy xem bên dưới mã của sleep()trong 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: Dự án Selenium có một phương pháp Sleeper mà không yêu cầu bắt một ngoại lệ khi sử dụng nó: selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/...
djangofan

1
Tôi đồng ý. Nếu bạn muốn khai báo thời gian ngủ của mình là một hằng số mà bạn có thể thay đổi sau này, chẳng hạn như từ 1 phút đến 10 giây, một giải pháp là public static final long SLEEPING_TIME = TimeUnit.MINUTES.toMillis(1);. Điều này cho phép Thread.sleep()nhưng duy trì lợi thế dễ đọc của TimeUnit.
Ole VV

8

Họ giống nhau. Tôi thích sau này bởi vì nó là mô tả nhiều hơn và cho phép lựa chọn đơn vị thời gian (see TimeUnit): DAYS, HOURS, MICROSECONDS, MILLISECONDS, MINUTES, NANOSECONDS, SECONDS.


5
tranh luận: Tôi thích là người đầu tiên - Tôi muốn các thread để ngủ, không phải là SECONDShay MILLISECONDS[:-)
user85421

3
@CarlosHeuberger: tốt, bạn có thể đọc nó là giấc ngủ đối với xSECONDS , nhưng chắc chắn đó là vấn đề sở thích. Mặt khác, lưu ý rằng sleep()staticphương pháp trên Thread- vì vậy người ta có thể tranh luận rằng nó không phải là rõ ràng mà chủ đề là giả sử để ngủ (những gì hiện Thread myThread = ...; myThread.sleep()có nghĩa là?)
Tomasz Nurkiewicz

6
@CarlosHeuberger sẽ tốt hơn để có thể ghiThread.sleep(3, TimeUnit.SECONDS)
assylias

Cập nhật để loại bỏ bất kỳ sự nhầm lẫn về tính tương đương vì các đơn vị lựa chọn
Rachel

@assylias Tôi đồng ý, nhưng tiếc là tôi không thể thay đổi nó [: - |
user85421
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.