TimeUnit枚舉中的sleep()方法

今天在研究 RateLimiter 類的時候,無心中看到了下面這行代碼:線程

NANOSECONDS.sleep(remainingNanos);

點進去看了下實現方式,發現用的是 Thread 提供的 sleep 方法,代碼以下:code

public void sleep(long timeout) throws InterruptedException {
        if (timeout > 0) {
            long ms = toMillis(timeout);
            int ns = excessNanos(timeout, ms);
            Thread.sleep(ms, ns);
        }
    }

原來 TimeUnit 枚舉類中也提供了一個線程睡眠的方法,且線程在睡眠的過程當中被打斷,一樣會拋出一個 InterruptedException 異常。rem

既然 TimeUnit 提供的 sleep 功能和 Thread 提供的 sleep 功能同樣同樣,那麼 TimeUnit 爲何還要實現 * sleep* 方法?我想最大的緣由就是可讀性和易用性的提高,來看下面的例子:it

// 睡眠4秒
TimeUnit.SECONDS.sleep(4);   
// 睡眠4秒
Thread.sleep(4 * 1000);

結果顯而易見,明顯上面的編寫方式更直觀,更簡潔,之後再有涉及到線程睡眠的地方能夠直接使用 TimeUnit 枚舉類中的 sleep 方法。io

相關文章
相關標籤/搜索