sleep()方法平替写法

前言:

        在使用sleep()方法休眠时,一般需要传入休眠时间的毫秒值;如果休眠时间为(2小时53分10秒)这样需要对这个时间转换为毫秒值,对于这些时间的转换是很琐碎的,且sleep()方法如果休眠时间为“负数”时还会抛出异常;下面有一个平替sleep()方法解决了这些问题;

  // 休眠 2小时53分10秒
  public static void main(String[] args) {

       // 时间单位
       long second = 1000L;
       long minute = second * 60;
       long hour = minute * 60;

       /*
            弊端
                1.计算麻烦
                2.如果休眠时间为“负数”会抛出异常
        */
        try {
            // 计算出2小时53分10秒转为毫秒数
            long time = (hour * 2) + (minute * 56) + (second * 10);
            Thread.sleep(time);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }


         /*
           好处:
                1.更灵活不用再去进行计算
                2.如果休眠时间为“负数”则不会执行休眠,不会像sleep()方法那样抛出异常
          */
        try {
            TimeUnit.HOURS.sleep(2);
            TimeUnit.MINUTES.sleep(53);
            TimeUnit.SECONDS.sleep(10);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

TimeUnit下sleep()方法源码

    public void sleep(long timeout) throws InterruptedException {
        if (timeout > 0) { // 若为负数则不执行休眠
            long ms = toMillis(timeout); 
            int ns = excessNanos(timeout, ms); 
            Thread.sleep(ms, ns); // 本质还是调用了Thread.sleep()方法
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值