java之TimeUnit.SECONDS.sleep()详细分析(全)

前言

TimeUnit是java.util.concurrent包下的一个类名
主要功能是暂停线程的操作
与Thread.sleep()一样的功能都是暂停线程

  • TimeUnit.SECONDS.sleep()这个方法可以精确到任意时间,指定DAYS、HOURS、MINUTES,SECONDS、MILLISECONDS和NANOSECONDS
  • Thread.sleep()参数可以如下:(可查看下面源码解释)
    在这里插入图片描述

1. 源码

1.1 TimeUnit.SECONDS.sleep()

枚举变量主要有(参数选择主要有)
很有可读性

变量意思
NANOSECONDS毫微秒
MICROSECONDS微秒
MILLISECONDS毫秒
SECONDS
MINUTES分钟
HOURS小时
DAYS

查看其源码
在暂停时间方面都有很高的精确性
转换时间以及验证

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

而且可以指定一些枚举变量
每一部分枚举变量都有其方法
参数多选择多
比如下方的分钟

public long toSeconds(long duration) {
        long s, m;
        if ((s = scale) <= SECOND_SCALE)
            return (s == SECOND_SCALE) ? duration : duration / secRatio;
        else if (duration > (m = maxSecs))
            return Long.MAX_VALUE;
        else if (duration < -m)
            return Long.MIN_VALUE;
        else
            return duration * secRatio;
    }

1.2 Thread.sleep()

对应的sleep()函数,查看其源码函数,主要有如下两个功能:

// 其设计的两个源码如下:

/*
Millis -以毫秒为单位的睡眠时间长度
IllegalArgumentException  millis的值是负数
InterruptedException  如果任何线程中断了当前线程。抛出此异常时,当前线程的中断状态将被清除。
*/
public static native void sleep(long millis) throws InterruptedException;


/*
使当前正在执行的线程休眠(临时停止执行),休眠时间为指定的毫秒数加上指定的纳秒数,具体取决于系统计时器和调度器的精度和准确性。线程不会失去任何监视器的所有权
*/

/*
Millis 以毫秒纳为单位的睡眠时间长度
nanos 表示为0到999999 纳秒额外的睡眠时间
对应的异常表示为:如果millis的值为负值,或者nano的值不在0-999999的范围内
*/
public static void sleep(long millis, int nanos)
	//InterruptedException异常表示 如果任何线程中断了当前线程。抛出此异常时,当前线程的中断状态将被清除
    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);
    }

2. 代码实战

通过结合线程进程的操作
暂停该线程,将其挂起,可以运用该代码

表示时间单位为分钟,.sleep(1)则表示程序将暂停运行1个时间单位,即1分钟

TimeUnit.MINUTES.sleep(1);

3. 代码对比

Thread.sleep()一样的功能都是暂停线程
但是TimeUnit.SECONDS.sleep()更具有可读性

Thread.sleep()可读性低,但调用都是同样功能
TimeUnit.SECONDS.sleep()参数选择多,枚举变量的参数具体可查看上方

Thread.sleep()代码实列比如
Thread.sleep(5*60*1000);这样比较有可读性,但乘起来可读性较低

  • 9
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农研究僧

你的鼓励将是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值