[編輯]:得到的回答後,我明白它不是特定於Java,它涉及到OS調度器一樣,所以添加其他標籤線程可以在Java /其他語言中睡眠少於半毫秒嗎?
是否有可能在Java中,使一個線程睡眠納米秒。
當然,在查看線程api,我們可以在睡眠方法中通過納秒,答案可能是肯定的。
但看在Thread class執行/睡眠方法的來源,這是後我懷疑:
public static void sleep(long millis, int nanos)
throws InterruptedException {
if (millis < 0) {
throw new IllegalArgumentException("timeout value is negative");
}
if (nanos < 0 || nanos > 999999) {
throw new IllegalArgumentException(
"nanosecond timeout value out of range");
}
if (nanos >= 500000 || (nanos != 0 && millis == 0)) {
millis++;
}
sleep(millis);
}
現在根據邏輯它是由1
增加毫秒如果傳遞的納米秒超過半毫秒。但是這聽起來對我來說不合邏輯,可以說我已經寫了一個代碼,其中一個線程正在等待說一些40000 nano seconds
(在實際情況下可能不是這種情況),這小於半毫秒,這意味着我的線程不會等待在所有。
有人可以請評論相同和爲什麼這個設計決定等待毫秒而不是納秒秒?
還有什麼可以保證線程準確地醒來?
什麼能保證線程正確地喚醒? – biziclop
@biziclop完全。我將編輯我的問題來添加這一點 – Vishrant
@dr_debug它不重複,我問爲什麼選擇這個設計,而不是讓線程睡幾秒鐘 – Vishrant