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)
Câu trả lời:
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 TimeUnit
có 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);
}
}
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
.
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
.
SECONDS
hay MILLISECONDS
[:-)
SECONDS
, nhưng chắc chắn đó là vấn đề sở thích. Mặt khác, lưu ý rằng sleep()
là static
phươ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à?)
Thread.sleep(3, TimeUnit.SECONDS)
Thread.sleep(Duration.ofSeconds(s).toMillis())