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

相关文章
相关标签/搜索